我有这种方法可以将已签名或未签名的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。
答案 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 ,它有多种功能可以引导您达到您想要的效果