当我尝试在文件中写入字符串时遇到问题。例如,我有这段代码将整数值转换为 2 字节字符串,但字符串编码将整数转换为不可见字节。
例如,我需要将 45557 整数转换为 2 个字节 0xB1 和 0xF5,并将其转换为字符串 õ±。然后,在其他过程中,对õ±进行解码,得到B1F5。 问题是当我尝试解码 õ± 时,我得到 C3B5C2B1。我现在遇到了字符串编码的问题,但是我该如何解决它?
我正在尝试这个。
int iInteger = 45557;
int iLow = iInteger & 0b0000000011111111;
int iHight = (iInteger & 0b1111111100000000)>>8;
file_raw.open_file();
file_raw.println (" Caracter 1 num: " + iLow);
file_raw.println (" Caracter 2 num:" + iHight);
String cLow = new Character((char) 245).toString();
String cHigh = new Character((char) 177).toString();
然后,结果是
Caracter 1 num: 245
Caracter 2 num:177
Caracter 1 string: õ
Caracter 2 string :±
在你看来,这很好,但是当我将这些字符解码为十六进制时,我得到 16 位值,因为编码采用 UTF-8: õ -> C3B5(在记事本++或互联网转换器上转换) ± -> C2B1
我只想: õ -> F5 ± -> B1
您应该直接使用原始字节数组,并避免在中间将它们转换为 String,因为 String 在 Java 内部使用 UTF-16,这会导致编码问题。
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
public class ByteFileExample {
public static void main(String[] args) {
int iInteger = 45557;
byte iLow = (byte) (iInteger & 0xFF); // Low byte (F5)
byte iHigh = (byte) ((iInteger >> 8) & 0xFF); // High byte (B1)
try (FileOutputStream fos = new FileOutputStream("output.bin")) {
fos.write(iHigh); // Write the high byte (B1)
fos.write(iLow); // Write the low byte (F5)
} catch (IOException e) {
e.printStackTrace();
}
try (FileInputStream fis = new FileInputStream("output.bin")) {
int high = fis.read(); // Read the high byte (B1)
int low = fis.read(); // Read the low byte (F5)
// Combine the two bytes into an integer
int result = (high << 8) | (low & 0xFF);
System.out.println("Decoded integer: " + result); // Output 45557
} catch (IOException e) {
e.printStackTrace();
}
}
}