gpt4 book ai didi

java - 使用java中的移位将有符号字节数组内容转换为十进制

转载 作者:行者123 更新时间:2023-12-02 06:47:18 24 4
gpt4 key购买 nike

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

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.

有什么想法吗?

谢谢

最佳答案

类似这样的事情:

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。

关于java - 使用java中的移位将有符号字节数组内容转换为十进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18490349/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com