我正在读取数据,有些是 1 字节,有些是 2 字节,有些是 3 字节等。对于单字节
byte qtySat = r.readByte();
对于 2 个字节,我读作
int serialNumber = r.readUnsignedShort();
阅读一切正常,运作良好。当我转换为以十六进制格式显示时出现的问题很有趣。例如对于
Integer.toHexString(qtySat )
我得到的输出是 ffffffce 但我只想要 ce ?
然后对于 Integer.toHexString(serialNumber) 我得到的输出为 A1,但我希望前导 00 A1 导致这 2 个字节的数据。我应该对 Integer.toHexString 做哪些更改?
最佳答案
Integer.toHexString(qtySat )
为您提供传递给它的 int
值的二进制表示。如果您传递一个负数 byte
,它将变成一个相同值的负数 int
,这解释了您看到的所有 1
位。
在转换为十六进制字符串之前,您可以使用Integer.toHexString(qtySat & 0xff)
将除低 8 位以外的所有位设置为 0。
byte qtySat = (byte)0xce;
System.out.println (qtySat);
System.out.println (Integer.toHexString(qtySat & 0xff));
打印
-50
ce
关于java - 为什么单字节有前导 ffffff,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44409773/