Java - byte [] to String to byte []转换错误

时间:2018-01-12 21:07:11

标签: java string byte

当尝试从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 ...... 为什么,以及如何纠正这个问题?

1 个答案:

答案 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]));
}

上面使用的字符集允许我使用任何值的字节而不转换它们,这对于处理二进制数据很有用。