Java: преобразование байта в целое число

Мне нужно преобразовать 2 байтовый массив (byte [2]) в целочисленное значение в java. Как я могу это сделать?

Ответы

Ответ 1

Вы можете использовать ByteBuffer для этого:

ByteBuffer buffer = ByteBuffer.wrap(myArray);
buffer.order(ByteOrder.LITTLE_ENDIAN);  // if you want little-endian
int result = buffer.getShort();

См. также Преобразовать 4 байта в int.

Ответ 2

В Java байты подписываются, что означает, что значение байта может быть отрицательным, а когда это произойдет, исходное решение @MattBall не будет работать.

Например, если двоичная форма массива байтов выглядит так:

1000 1101 1000 1101

тогда myArray [0] равен 1000 1101, а myArray [1] равен 1000 1101, десятичное значение байта 1000 1101 равно -115 вместо 141 (= 2 ^ 7 + 2 ^ 3 + 2 ^ 2 + 2 ^ 0)

если мы используем

int result = (myArray[0] << 8) + myArray[1]

значение будет -16191, которое НЕПРАВИЛЬНО.

Причина, по которой это неправильно, заключается в том, что, когда мы интерпретируем 2-байтовый массив в целое число, все байты unsigned, поэтому при переводе мы должны сопоставить подписанные байты с целым числом без знака:

((myArray[0] & 0xff) << 8) + (myArray[1] & 0xff)

результат 36237, используйте калькулятор или ByteBuffer, чтобы проверить, правильно ли он (я сделал это и да, он правильно).

Ответ 3

Ну, каждый байт является целым числом в диапазоне -128..127, поэтому вам нужен способ сопоставить пару целых чисел с одним целым числом. Есть много способов сделать это, в зависимости от того, что вы закодировали в паре байтов. Наиболее распространенным будет сохранение 16-разрядного целого числа со знаком в виде пары байтов. Преобразование этого значения в целое число зависит от того, сохраняете ли вы его в форме big-endian:

(byte_array[0]<<8) + (byte_array[1] & 0xff)

или немного endian:

(byte_array[1]<<8) + (byte_array[0] & 0xff)

Ответ 4

Кроме того, если вы можете использовать библиотеку Guava:

Ints.fromByteArray(0, 0, myArray[1], myArray[0]);

Стоит отметить, так как многие проекты используют его в любом случае.

Ответ 5

Просто выполните следующее:

return new BigInteger(byte[] yourByteArray).intValue();

Хорошо работает с преобразованиями команд Bluetooth и т.д. Не нужно беспокоиться о подписанном или беззнакомом преобразовании.