为什么单字节有前导 ffffff

2024-01-12

我正在读取数据,有些是 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(使用前将#替换为@)

为什么单字节有前导 ffffff 的相关文章

随机推荐