当尝试从byte []类型的数组构造String,然后使用String.getBytes()转换回byte []数组时,会修改一些字节值。下面是一段代码,可以重现我的问题:
public static void main(String[] args)
{
byte[] arr = new byte[] { (byte)0xff, 0x5e};
String str = new String(arr);
byte[] arr2 = str.getBytes();
for(int i = 0; i < 2; i++)
System.out.print(String.format("%02X ", arr2[i]));
for(int i = 0; i < 2; i++)
System.out.print(String.format("%02X ", arr[i]));
}
输出如下:
3F 5E FF 5E
我尝试过使用所有标准字符集进行转换,结果却是一样的。由于一个我无法弄清楚的原因,0xFF变为0x3F ...... 为什么,以及如何纠正这个问题?
答案 0 :(得分:0)
在得到一些有用的答案后,我就是这样做的:
public static void main(String[] args)
{
byte[] arr = new byte[] { (byte)0xff, 0x5e};
String str = new String(arr, Charset.forName("ISO-8859-1"));
byte[] arr2 = str.getBytes(Charset.forName("ISO-8859-1"));
for(int i = 0; i < 2; i++)
System.out.print(String.format("%02X ", arr2[i]));
for(int i = 0; i < 2; i++)
System.out.print(String.format("%02X ", arr[i]));
}
上面使用的字符集允许我使用任何值的字节而不转换它们,这对于处理二进制数据很有用。