Java 打印包含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的两个补码表示形式。看见您可以

我创建了一个字符串,并使用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 & 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)