UTF-16 转换给出了错误的十六进制值

UTF-16 conversion given wrong hex value

代码片段是:

String str = "h";
StringBuffer buf = new StringBuffer();
byte[] bytes = str.getBytes("UTF-16BE");
for (int i = 0; i < bytes.length; i++) {
    String byteAsHex = Integer.toHexString(bytes[i]);
    buf.append(byteAsHex);
}
System.out.println(buf.toString());

输出为:068 其中拉丁文小写字母 H 为 0068。

你能告诉我为什么缺少前导 0 吗?

发生这种情况是因为 Integer.toHexString() 将始终 return 数字的最短表示形式,即没有任何前导零。因此,在您的情况下,您有一个 2 字节的数组:[0, 0x68]Integer.toHexString() 被调用两次,第一次是 returns 0,第二次是returns 68.

为了解决这个问题,如果字符串长度为 1,您需要将 '0' 添加到由 Integer.toHexString() 编辑的每个字符串 return 之前。

这是因为 Integer.toHexString(0) 结果是 "0",而不是 "00"

您可以在替换

时解决此问题
Integer.toHexString(bytes[i])

来自

String.format("%02x", bytes[i])