2016-06-14 2 views
0

byte [] demande = новый байт [2]; Предположим, что requeste - это кадр данных, который будет отправлен в сокет. Что должно быть байт [0] и байт [1], если я хочу отправить 200. Я пытаюсь написать байт [0] = 1 и байт [1] = - 56 (1 * 256 - 56) = 200, т работы. Как я могу сделать?отправить фрейм tdata в гнездо

ответ

1

Я предполагаю, что число 200 является десятичным значением. Поскольку 200 меньше 255, он будет вписываться в один байт, потому что шестнадцатеричное значение 200 равно 0xC8.

Так что в вашем случае у вас есть два варианта. Какой из них правильный, зависит от используемого вами протокола.

Либо

byte[] demande = { 0x00, 0xC8 }; // little endian 

или

byte[] demande = { 0xC8, 0x00 }; // big endian 

Или, если вы предпочитаете

byte[] demande = new byte[2]; 
demande[0] = 0x00; 
demande[1] = 0xC8; 

(маленький обратный порядок байт)

+0

0xC8 не принимается, не более 0х80 принимается, потому что я думаю, что его подписали байт -128 128 – pape

+0

@pape Не читая протокол для вас устройства общаться с ним трудно дать лучший совет. Вы можете попытаться отправить три байта, например byte [] demande = {'2', '0', '0'}; если это протокол ASCII. –

+0

Нет, это не протокол ASCII, это UTF-8 – pape

1

Вы можете использовать ByteBuffer класс для создания байтовый массив. Если вы хотите, чтобы преобразовать число 200 в массив байтов:

ByteBuffer b = ByteBuffer.allocate(2); 
b.putInt(0x000000c8); 

byte[] result = b.array(); 
Смежные вопросы