我正在读数据有些是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做些什么更改?
答案 0 :(得分:1)
如果字节(8位) qtySat 变量为负数,则在提升为整数时将添加前导数,这是Integer.toHexString(int)
需要作为参数
摆脱那些你需要确保非负面论据的人
System.out.println(Integer.toHexString(Math.abs(serialNumber)));
答案 1 :(得分:0)
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