[英]Convert Byte[] to int
我有這個方法將有符號或無符號的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個wave文件,on是orignal one,另一個是修改的並計算SNR。
好的,所以你有一個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;
}
如果我在這里遺漏了什么,請告訴我。
謝謝你的答案,但我發現問題來自其他地方,而不是來自轉換方法,
還有另一個版本的方法
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;
}
您是將代碼編寫為練習,還是只是想找到一種方法? 如果是后者,我建議使用ByteBuffer 。 它有一個getInt方法應該可以解決問題。
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;
}
這段代碼完美無缺,我找到了代碼示例,沒有任何作用,我這樣做。
我推薦DatatypeConverter ,它有多個功能可以引導你到你想要的
在您添加256的情況下,您似乎忘了向左移動。
此外,你假設一個小端字節[](你可能想要驗證它不超過4個字節長)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.