转换为2';Java中无符号正值的s补码字节

转换为2';Java中无符号正值的s补码字节,java,android,bytearray,byte,twos-complement,Java,Android,Bytearray,Byte,Twos Complement,我有一个8位字节的Java数组。字节数组由从外部传感器接收的16位数字的高字节和低字节组成 例如,字节数组可能如下所示: 00 00 00 01 00 02 00 03 0 1 2 3 4 5 6 7 在上面的字节数组中,每个偶数索引是16位数字的高字节,每个奇数索引是低字节 我遇到的问题是,当数字大于127时,导致数字的2的补码表示占上风。我真正想做的是保留正的无符号数。因此我不喜欢2的补码。这就是我一直试图做但没有成功的事情 byte[] buffer = new byte[

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

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

00 00 00 01 00 02 00 03
0  1  2  3  4  5  6  7
在上面的字节数组中,每个偶数索引是16位数字的高字节,每个奇数索引是低字节

我遇到的问题是,当数字大于127时,导致数字的2的补码表示占上风。我真正想做的是保留正的无符号数。因此我不喜欢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);
}
byte[]buffer=新字节[1024];
//一些将数字B/W 0-500随机放入缓冲区的代码片段
对于(int i=0;i<1024;i+=2){
int-twoByte=0;
短高=0,低=0;
高=(短)缓冲区[i];
低=(短)缓冲区[i+1];
twoByte=((高Try:

5882是十六进制的0x16fa,它可以工作

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

尝试:

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

int twoBytes = (high << 8) | low;
5882是十六进制的0x16fa,它可以工作


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

要将数字从2的补码转换为无符号:

if(x<0)
{
    x=256+x;
}

if(x将数字从2的补码转换为无符号:

if(x<0)
{
    x=256+x;
}

如果(X这对我不起作用…从逻辑上讲,它会起作用,但输出不是预期的…也许值得一提的是,我是在Android环境下这样做的…谢谢,是的,你的方法很有效…似乎我的数组值都不稳定…不过感谢你的帮助:)这对我来说不起作用…从逻辑上讲,它会起作用,但输出不是预期的…也许值得一提的是,我是在Android环境下这样做的…谢谢,是的,你的方法很有效…似乎我的数组值都不可靠…不过感谢你的帮助:)
if(x<0)
{
    x=256+x;
}