我正在读取数据,有些是 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));
prints
-50
ce
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)