包含EBCDIC值的java打印字节数组未给出预期值
我创建了一个字符串,并使用EBCDIC编码将其转换为字节数组。当我打印数组时,H的值与EBCDIC图表中的不同
预期产出
“H”的EBCDIC值-->;200根据链接EBCDIC 1047 chart
实际产出
“H”的EBCDIC值-->;[-56]
public static void main(String[] args) throws UnsupportedEncodingException {
String str = "H";
byte[] b1 = new byte[10];
b1 = str.getBytes("Cp1047");
System.out.println(Arrays.toString(b1));
for (byte b : b1) {
System.out.println(b);
}
b1 = str.getBytes("UTF-16");
System.out.println(Arrays.toString(b1));
b1 = str.getBytes();
System.out.println(Arrays.toString(b1));
}
# 1 楼答案
在你的圈子里
Java将b(一个字节)提升为整数,从而打印出
0xFFFFFFC8
的值,这是对b(一个字节)的符号扩展0xFFFFFFC8
是有符号数-56的两个补码表示。见this。通过执行以下操作,可以防止标志扩展:这将导致打印值
0xC8
(十进制为200)