2011-02-09 182 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,它具有多种功能,可以带你到你想要的