将Byte []转换为int

out*_*lou 3 java int signed byte

我有这个方法将有符号或无符号转换byteint,但它不返回它应该返回的内容.有人可以在下面的代码中指出问题吗?

public int convertByteToInt(byte[] b){          
    int value= 0;
    for(int i=0;i<b.length;i++){                
    int n=(b[i]<0?(int)b[i]+256:(int)b[i])<<(8*i);             
        value+=n;
    }         
    return value;       
}
Run Code Online (Sandbox Code Playgroud)

编辑:

我正在读取一个wav文件以计算SNR.转换返回的值应该在0到255之间给出一些东西.应用程序应该比较2个wave文件,on是orignal one,另一个是修改的并计算SNR.

Kei*_*thS 6

好的,所以你有一个big-endian字节数组,你要转换为int.我认为每个字节的值是多少都不重要; 你只需要将它们粘在一起:

public int convertByteToInt(byte[] b)
{           
    int value= 0;
    for(int i=0; i<b.length; i++)
       value = (value << 8) | b[i];     
    return value;       
}
Run Code Online (Sandbox Code Playgroud)

如果我在这里遗漏了什么,请告诉我.


out*_*lou 6

谢谢你的答案,但我发现问题来自其他地方,而不是来自转换方法,

还有另一个版本的方法

public int convertirOctetEnEntier(byte[] b){    
    int MASK = 0xFF;
    int result = 0;   
        result = b[0] & MASK;
        result = result + ((b[1] & MASK) << 8);
        result = result + ((b[2] & MASK) << 16);
        result = result + ((b[3] & MASK) << 24);            
    return result;
}
Run Code Online (Sandbox Code Playgroud)