我有一个带有十六进制十进制值的字节数组,我使用以下代码将该数组转换为十进制值
byte[] content = message.getFieldValue( "_Decoder Message" ).data();
int[] decContent = new int[ content.length ];
int i = 0;
for ( byte b : content )
decContent[ i++ ] = b & 0xff;
现在阵列看起来像 decContent = [01 00 05 00 00 00];
转换此数组的前2个索引并保存为int值,如下所示
int traceIdlow = decContent[ 0 ] & 0xFF;
int traceIdhigh = decContent[ 1 ] & 0xFF;
int TraceId = traceIdlow | ( traceIdhigh << 8 );
最后4个索引也需要转换为int,但我对它的变化感到困惑,不管它应该是8还是16。
如何将最后4个索引转换为int值,以便根据上面的示例,该值变为
00 00 00 05 = 5 in decimal.
有什么想法吗?
谢谢
答案 0 :(得分:1)
您是否在询问如何更改4个字节的顺序 来自:b0 b1 b2 b3 to:b3b2b1b0在一个int变量?
byte[] b = {0x5, 0x44, (byte)0x7f, 0x1}; // convert to 017f4405
int val = b[3]<<24 | b[2]<<16 | b[1]<<8 | b[0];
System.out.println("val="+Integer.toHexString(val)); // val=17f4405
答案 1 :(得分:1)
这样的事情:
int val = decContent[ 2 ] | (decContent[ 3 ] << 8)
| (decContent[ 4 ] << 16) | (decContent[ 5 ] << 24);
请注意,整数始终用Java签名。如果该值未签名且可能大于Integer.MAX_VALUE
,则必须将其放入long
。
一点点测试:
public static void main(String[] args) throws IOException {
int[] decContent = new int[] {1,0,5,0,0,0};
int val = decContent[ 2 ] | (decContent[ 3 ] << 8)
| (decContent[ 4 ] << 16) | (decContent[ 5 ] << 24);
System.out.println(val);
}
打印答案5.