我有一个字节数组 -
byte[] byteArr = new byte[] { (byte)0x00 , (byte)0xF0 , (byte)0x03 };
我只是得到每一个,
Integer byte1 = Integer.valueOf(byteArr[0]);
Integer byte2 = Integer.valueOf(byteArr[1]);
Integer byte3 = Integer.valueOf(byteArr[2]);
String pgnString = byte1.toString() + byte2.toString() + byte3.toString();
我的输出是:0-163
但我可以看到正确的输出应该是:61443
链接--- http://www.binaryhexconverter.com/hex-to-decimal-converter
答案 0 :(得分:1)
这是因为字节已签名。 (byte)0xF0
实际上与(byte)-16
相同。
要转换为无符号数量,您可以屏蔽低8位:
int byte1 = byteArr[0] & 0xff;
int byte2 = byteArr[1] & 0xff;
int byte3 = byteArr[2] & 0xff;
String pgnString = String.valueOf(byte1 * 0x10000 + byte2 * 0x100 + byte3);
答案 1 :(得分:0)
如果您不希望逐个浏览,可以使用ByteBuffer
转换为其他基地。
byte[] byteArr = new byte[] { (byte)0x00 , (byte)0x00 , (byte)0xF0 , (byte)0x03 };
int value = ByteBuffer.wrap(byteArr).getInt();
// value = 61443
注意:byte[]
的长度必须为4(或者每个4字节部分调用getInt()
)。