2015-01-14 5 views
0

В настоящее время я пишу небольшое приложение, которое взаимодействует с драйвером Windows через обратный вызов. Это приложение записывает различные координаты XY и состояния кнопок, которые выражаются целыми числами. Приложение отправит эти данные для обратного вызова через локальную сеть. Мой опыт работы с пакетами ограничен, по меньшей мере, но я, по крайней мере, знаю, что мне нужно преобразовать значения в массив байтов.Преобразование целочисленного массива в байтовый массив

Например, ниже приведены два набора массивов:

int[][] axes = { {75, 150}, {0, 40} }; 

int[] buttons= {0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1} 

Как именно будет идти о преобразовании этих значений в массив байтов? Также, какое использование смещения служит? Я огляделся, и я не могу его обнять.

+0

Все ответы предполагают, что вы не против использовать 4 бита для каждого целого (даже если он может быть преобразован с использованием одного байта). Если у вас есть большой массив низкоценных целых чисел, вы можете проверить другое решение, используя бит-кодирование на битах высшего порядка, но у меня нет достаточно времени, чтобы написать его прямо сейчас. Если вы все еще хотите узнать об этом вечером, я отправлю его. – NitroNbg

+0

@NitroNbg Мне удалось разобраться. Спасибо за помощь, хотя! – Raggeth

ответ

2

преобразовать int в байт []. создать эту функцию:

byte[] toBytes(int i) 
{ 
    byte[] result = new byte[4]; 

    result[0] = (byte) (i >> 24); 
    result[1] = (byte) (i >> 16); 
    result[2] = (byte) (i >> 8); 
    result[3] = (byte) (i /*>> 0*/); 

    return result; 
} 

Выполнить в цикле на ИНТ [], для каждого вызова клеток к функции и добавить результат в массив байтов.

1

Вам необходимо пройти через все элементы массива, а затем извлечь байты по одному от каждого целого. Предполагая, что целое число составляет 4 байта, вы можете использовать операции смещения битов и извлекать каждые 8 ​​бит из целого числа. После этого, используя тип данных байта, вы можете создавать массивы.

например. а = 10110011 11101010 11110101 11010100 // в двоичном

 byte 3 byte 2 byte 1 byte 0 

байта 0 = а & 0xFF

байт 1 = (а >> 8) & 0xFF

байт 2 = (а >> 16) & 0xFF

байт 3 = (а >> 24) & 0xFF

для того, чтобы преобразовать обратно в intege r, для каждого набора из 4 байтов в массиве байтов:

номер = (byte3 < < 24) | (byte2 < < 16) | (байт 1 < < 8) | byte0

+1

Истинно и для перекомпиляции его обратно в целое будет 'int originalInt = byte0 | (byte1 << 8) | (byte2 << 16) | (byte3 << 24) ' – NitroNbg

Смежные вопросы