簡體   English   中英

將Byte []轉換為int

[英]Convert Byte[] to int

我有這個方法將有符號或無符號的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;       
}

編輯:

我正在讀取一個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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM