Java 打印包含EBCDIC值的字节数组不会给出预期值
我创建了一个字符串,并使用EBCDIC编码从中获得了一个字节数组。当我打印数组时,H的值与EBCDIC图表中的值不同 预期产出 “H”的EBCDIC值-->200(根据链路) 实际产出 “H”-->[-56]的EBCDIC值 在你的圈子里Java 打印包含EBCDIC值的字节数组不会给出预期值,java,string,ebcdic,Java,String,Ebcdic,我创建了一个字符串,并使用EBCDIC编码从中获得了一个字节数组。当我打印数组时,H的值与EBCDIC图表中的值不同 预期产出 “H”的EBCDIC值-->200(根据链路) 实际产出 “H”-->[-56]的EBCDIC值 在你的圈子里 for (byte b : b1) System.out.println(b); Java将b(一个字节)提升为整数,从而打印出0xFFFFFFC8的值,这是对b(一个字节)的符号扩展0xFFFFC8是有符号数字-56的两个补码表示形式。看见您可以
for (byte b : b1)
System.out.println(b);
Java将b(一个字节)提升为整数,从而打印出0xFFFFFFC8
的值,这是对b(一个字节)的符号扩展0xFFFFC8
是有符号数字-56的两个补码表示形式。看见您可以通过执行以下操作来防止标志扩展:
for (byte b :b1)
System.out.println(b & 0xFF);
这将导致打印循环中的值0xC8
(十进制200)。
for (byte b : b1)
System.out.println(b);
Java将b(一个字节)提升为整数,从而打印出0xFFFFFFC8
的值,这是对b(一个字节)的符号扩展0xFFFFC8
是有符号数字-56的两个补码表示形式。看见您可以通过执行以下操作来防止标志扩展:
for (byte b :b1)
System.out.println(b & 0xFF);
这将导致打印值0xC8
(十进制200)