为什么单个字节有前导ffffff

时间:2017-06-07 10:14:24

标签: java hex type-conversion

我正在读数据有些是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做些什么更改?

2 个答案:

答案 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