将Byte[]转换为int

3

我有一个方法,可以将有符号或无符号的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文件以计算信噪比。转换后返回的值应该在0到255之间。 应用程序应该比较两个波形文件,一个是原始文件,另一个是修改后的文件,并计算信噪比。


2
能否把你的代码缩进一下? - Amokrane Chentir
你确定不想要 Integer.parseInt(new String(b)) 吗? - Zeki
它会给出什么?你有任何例子吗? - templatetypedef
请查看以下内容:https://dev59.com/XW035IYBdhLWcg3weP7f - TacB0sS
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;
}

6

好的,所以你有一个大端字节数组,要将其转换为整数。我认为每个字节的值并不重要,你只需要将它们全部拼接在一起:

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

如果我漏掉了什么,请告诉我。

4

你是在练习编写代码,还是只是想找一种方法来做它?如果是后者,我建议使用ByteBuffer。它有一个getInt方法,应该可以解决问题。


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

看起来你在添加256的情况下忘记了左移。

此外,你假设了一个小端字节数组(你可能需要验证它不能超过4个字节长)


0
我会推荐使用DatatypeConverter,它有多个函数可以帮助你得到想要的结果。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接