打印包含 EBCDIC 值的字节数组未给出预期值
Printing byte array containing EBCDIC values doesnt give expected value
我创建了一个转换后的字符串,使用 EBCDIC 编码从中得到了一个字节数组。当我打印数组时,H 的值与 EBCDIC 图表中的值不同。
预期输出
"H" 的 EBCDIC 值-->200 根据 link EBCDIC 1047 chart
实际输出
"H"-->[-56]
的 EBCDIC 值
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));
}
在你的循环中
for (byte b : b1)
System.out.println(b);
当 Java 将 b(一个字节)提升为整数时,它是符号扩展,这导致 0xFFFFFFC8
的值被打印出来。 0xFFFFFFC8
是有符号数 -56 的二进制补码表示。参见 this。您可以通过这样做来阻止符号扩展:
for (byte b :b1)
System.out.println(b & 0xFF);
这将导致打印值 0xC8
(十进制为 200)。
我创建了一个转换后的字符串,使用 EBCDIC 编码从中得到了一个字节数组。当我打印数组时,H 的值与 EBCDIC 图表中的值不同。
预期输出
"H" 的 EBCDIC 值-->200 根据 link EBCDIC 1047 chart
实际输出
"H"-->[-56]
的 EBCDIC 值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));
}
在你的循环中
for (byte b : b1)
System.out.println(b);
当 Java 将 b(一个字节)提升为整数时,它是符号扩展,这导致 0xFFFFFFC8
的值被打印出来。 0xFFFFFFC8
是有符号数 -56 的二进制补码表示。参见 this。您可以通过这样做来阻止符号扩展:
for (byte b :b1)
System.out.println(b & 0xFF);
这将导致打印值 0xC8
(十进制为 200)。