java - 为什么单字节有前导 ffffff

标签 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 做哪些更改?

最佳答案

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/

相关文章:

java - 在 Android 中跨类共享首选项

sql-server - 为什么我不能比较这些十六进制值?

c - c 中的二进制数和字符串表示

c# - c#中long到decimal的转换

java - 通过类型转换添加字节,Java

java - 模板化 Maven 原型(prototype)

java - 扩展数据表和DataScroller

java - mfp WL.Client.createSecurityCheckChallengeHandler() 或 WLAuthorizationManager.login() 中登录失败

c++ - 如何将包含字节的字符串转换为 C++ 中的字节数组?

c++ - 转换运算符作为独立函数