gpt4 book ai didi

java - 在 Java 中将 2 的补码字节转换为无符号正值

转载 作者:行者123 更新时间:2023-11-29 08:02:49 25 4
gpt4 key购买 nike

我在 Java 中有一个 8 位字节数组。字节数组由从外部传感器接收的 16 位数字的高字节和低字节组成。

例如,字节数组可能如下:

00 00 00 01 00 02 00 03
0 1 2 3 4 5 6 7

在上面的字节数组中,每个偶数索引是一个 16 位数字的高字节,每个奇数索引是低字节。

我遇到的问题是当数字大于 127 时,导致数字的 2 的补码表示占上风。我真正想做的是保留 POSITIVE 无符号数。因此我不关心 2 的补码。这是我尝试过但没有成功的做法。

byte[] buffer = new byte[1024]; 

//SOME CODE SNIPPET THAT PUTS NUMBERS B/W 0-500 INTO THE BUFFER RANDOMLY

for(int i = 0; i < 1024; i+=2) {
int twoByte = 0;
short high = 0, low = 0;
high = (short)buffer[i];
low = (short)buffer[i+1];
twoByte = ((high << 8) | low);
System.out.println(twoByte);
}

我试图转换为 short 以使 8 位数字无符号,但似乎 java 截断了前导 0 的广告将其视为 8 位并保留负号。有人知道更好的方法吗?

## 编辑:我不知道这是否重要,但值得一提的是这是一个在 Android 上运行的应用程序。##

干杯,

最佳答案

尝试:

int high = ((int)buffer[i]) & 0xff;
int low = ((int)buffer[i+1]) & 0xff;

int twoBytes = (high << 8) | low;

示例代码:

byte[] buffer = new byte[] { (byte) 0x16, (byte) 0xfa };

int high = ((int)buffer[0]) & 0xff;
int low = ((int)buffer[1]) & 0xff;
int twoBytes = (high << 8) | low;

值(value)观:

buffer   = [ 22, -6 ]
high = 22
low = 250
twoBytes = 5882

5882 是十六进制的 0x16fa,它有效。

检查您是否正确读取了传感器中的字节。

关于java - 在 Java 中将 2 的补码字节转换为无符号正值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13375133/

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