2011-02-09 4 views
2

У меня есть этот метод, который преобразует подписанный или не подписанный byte в int, но он не возвращает то, что он должен вернуть. Может ли кто-нибудь указать на проблему в приведенном ниже коде?Convert Byte [] to 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;  
} 

Отредактировано:

I'am actualy чтение файла WAV для того, чтобы рассчитать SNR. возвращаемое значение из преобразования должно давать что-то среднее между 0 и 255. Приложение должно сравнивать файл с двумя волнами, по одному или другому, и другое модифицировано и вычисляет SNR.

+2

Можете ли вы like..indent код? –

+0

Вы уверены, что не хотите Integer.parseInt (new String (b)) – Zeki

+0

Что он дает? У вас есть примеры? – templatetypedef

ответ

4

Спасибо за ответы, но я обнаружил, что проблема приходит откуда-то еще, а не от Methode преобразования,

есть другая версия Methode

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

Я попробую byteBuffer – outellou

0

Похоже, вы забыли сдвиг влево в том случае, когда вы добавляете 256.

Кроме того, Вы предполагаете немного обратный порядок байт байт [] (и вы можете подтвердить, что это не более чем 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, он имеет несколько функций, которые могут привести вас к тому, что вы хотите