0

我有一个带有十六进制十进制值的字节数组,我使用以下代码将该数组转换为十进制值

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.

有任何想法吗?

谢谢

4

2 回答 2

1

您是否在问如何在 int 变量中将 4 个字节的顺序从:b0 b1 b2 b3 更改为:b3b2b1b0?

  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
于 2013-08-28T14:29:33.493 回答
1

像这样的东西:

int val = decContent[ 2 ] | (decContent[ 3 ] << 8)
  | (decContent[ 4 ] << 16) | (decContent[ 5 ] << 24);

请注意,整数始终使用 Java 进行签名。如果该值是无符号的并且可以变得大于Integer.MAX_VALUE您必须将其放入 along中。

一个小测试:

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。

于 2013-08-28T14:29:41.930 回答