十六进制到十进制转换错误

时间:2014-05-08 15:50:15

标签: android android-bluetooth hex

我有一个字节数组 -

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

2 个答案:

答案 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())。