Преобразовать байт [] в int - PullRequest
       99

Преобразовать байт [] в int

3 голосов
/ 10 февраля 2011

У меня есть этот метод, который преобразует подписанный или не подписанный 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-файл, чтобы рассчитать SNR. возвращаемое значение от преобразования должно дать что-то между 0 и 255. Приложение должно сравнить файл 2 волн, один из которых является оригинальным, а другой изменен и рассчитать SNR.

Ответы [ 6 ]

6 голосов
/ 10 февраля 2011

Спасибо за ответы, но я обнаружил, что проблема в другом месте, а не в методе конвертации,

, существует другая версия метода

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 голосов
/ 10 февраля 2011

ОК, значит, у вас есть байтовый массив с прямым порядком байтов, который вы конвертируете в int. Я не думаю, что имеет значение, какова ценность каждого байта; вам просто нужно собрать их все вместе:

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

Если я что-то здесь упустил, дайте мне знать.

4 голосов
/ 10 февраля 2011

Вы пишете код как упражнение или просто ищете способ сделать это?Если последнее, я бы предложил использовать ByteBuffer .У него есть метод getInt, который должен добиться цели.

0 голосов
/ 26 мая 2016

Я бы порекомендовал DatatypeConverter , он имеет несколько функций, которые могут привести вас к тому, что вы хотите

0 голосов
/ 26 мая 2016
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 голосов
/ 10 февраля 2011

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

Кроме того, вы предполагаете байтовый порядок байтов [] (и вам может потребоваться проверить, что он имеет длину не более 4 байтов)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...