2011-02-09 234 views
2

我有這種方法可以將有符號或無符號的byte轉換爲int,但它不會返回它應該返回的內容。有人可以在下面的代碼中指出問題嗎?將字節[]轉換爲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;  
} 

編輯:

我'actualy讀取wav文件,以計算SNR。從轉換中返回的值應該給出0到255之間的值。 應用程序應該比較2個wave文件,on是原始值,另一個是修改並計算SNR。

+2

你能like..indent你的代碼? – 2011-02-09 21:23:54

+0

你確定你不想要Integer.parseInt(new String(b)) – Zeki 2011-02-09 21:27:56

回答

4

謝謝你的答案,但我發現,問題來自其他地方,而不是從轉換梅索德,

存在梅索德

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

你是在編寫代碼作爲練習,還是隻是在尋找一種方法來做到這一點?如果後者,我會建議使用ByteBuffer。它有一個getInt方法應該可以做到。

0

看起來你忘了左移在您要添加256

此外,你假設little-endian字節[](你可能想驗證它的不超過的情況下4字節長)

4

好的,所以你有一個大端字節數組,你將轉換爲一個int。我認爲這不重要,每個字節的價值是什麼;你只需要把它們粘在一起:

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

如果我在這裏失去了一些東西,讓我知道。

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

該代碼的其他版本完美的工作,我找到代碼示例,沒有任何工作,我這樣做。

0

我會建議DatatypeConverter,它具有多種功能,可以帶你到你想要的