3

我有这种方法可以将有符号或无符号转换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 文件,一个是原始文件,另一个是修改并计算 SNR。

4

6 回答 6

8

感谢您的回答,但我发现问题来自其他地方,而不是转换方法,

还有另一个版本的方法

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;
}
于 2011-02-09T23:48:49.947 回答
6

好的,所以您有一个要转换为 int 的大端字节数组。我认为每个字节的值是什么并不重要。你只需要把它们粘在一起:

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

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

于 2011-02-09T21:29:29.307 回答
4

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

于 2011-02-09T21:28:49.570 回答
0

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

此外,您假设一个 little-endian byte[] (并且您可能想要验证它的长度不超过 4 个字节)

于 2011-02-09T21:29:26.603 回答
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;
}

这段代码完美运行,我正在寻找代码示例,但没有任何效果,我这样做了。

于 2016-05-26T01:24:36.583 回答
0

我会推荐DatatypeConverter,它有多种功能可以引导你找到你想要的

于 2016-05-26T01:50:16.920 回答