2014-05-08 88 views
0

我有一个字节数组 -十六进制到十进制转换错误

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

回答

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); 
+0

好吧,但现在我得到'02403',但不是'61443'来自转换器。 –

+0

请参阅编辑。你必须考虑到字节有不同的权重。 – Henry

0

如果你不想在同一时间通过他们去一个,你可以使用ByteBuffer转换到另一个基地。

byte[] byteArr = new byte[] { (byte)0x00 , (byte)0x00 , (byte)0xF0 , (byte)0x03 }; 
int value = ByteBuffer.wrap(byteArr).getInt(); 
// value = 61443 

注:byte[]必须具有长度为4(或拨打getInt()为每个4字节的部分)。