将Byte []转换为int

时间:2011-02-09 21:22:10

标签: java byte int signed

我有这种方法可以将已签名或未签名的byte转换为int,但它不会返回它应该返回的内容。有人可以在下面的代码中指出问题吗?

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;       
}

编辑:

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

6 个答案:

答案 0 :(得分: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;       
}

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

答案 1 :(得分: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;
}

答案 2 :(得分:4)

您是将代码编写为练习,还是只是想找到一种方法?如果是后者,我建议使用ByteBuffer。它有一个getInt方法可以解决这个问题。

答案 3 :(得分:0)

在您添加256的情况下,您似乎忘了向左移动。

另外,你假设一个小端字节[](你可能想验证它不超过4个字节)

答案 4 :(得分:0)

public static String bytesToString(byte[] b) {
   try {
      return new String(b, "UTF-8");
   }

   catch (UnsupportedEncodingException ex) {
      Logger.getLogger(Util.class.getName()).log(Level.SEVERE, null, ex);
   }

   return null;
}

private int toInt(byte[] b1){
    String s1 = bytesToString(b1);
    int y = Integer.parseInt(s1);
    return y;
}

这段代码完美无缺,我找到了代码示例,没有任何作用,我这样做。

答案 5 :(得分:0)

我建议使用 DatatypeConverter ,它有多种功能可以引导您达到您想要的效果