java - 打印包含 EBCDIC 值的字节数组未给出预期值

标签 java string ebcdic

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

最佳答案

在你的循环中

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)。

关于java - 打印包含 EBCDIC 值的字节数组未给出预期值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43100662/

相关文章:

python - 在 Python 中从 TCP 客户端获取字符串后加快从字节字符串到图像的转换

hadoop - 如何将 native 写的java代码集成到Serde中进行hive查询

java - 如何通过java代码将ASCII码转换成主机二进制码?

eclipse - Eclipse 支持 EBCDIC 中的源吗?

java - 将字符串和数字与android中的列表分开

Java InputStreamReader 和 UTF-8 字符集

string - Haskell 操作文件内容

java - 使用数组列表来指示另一个数组列表的索引

java - Android 自定义 View 事件监听器在没有静态引用的情况下无法正常工作

c - 无法从结构中的二维数组打印字符串?