Декодирование ChannelBuffer из шестнадцатеричной отправки с терминала - PullRequest
1 голос
/ 20 октября 2019

Я пытаюсь декодировать пакеты, отправленные внешним устройством. Мне удалось перехватить отправленные данные, и я пытаюсь смоделировать соединение устройства с терминалом, например так:

echo -ne "\xab\x10\xac\x03\xac\x9a\xcd\x09\x01" | nc -v localhost 5187

Данные, отправленные устройством, читаются по следующему коду:

ChannelBuffer buf = ChannelBuffers.copiedBuffer(ByteOrder.LITTLE_ENDIAN, (String)msg, Charset.forName("US-ASCII"));

int header = buf.readUnsignedByte();
int flags = buf.readUnsignedByte();
int length = buf.readUnsignedShort();
int checksum = buf.readUnsignedShort();
int index = buf.readUnsignedShort();
int type = buf.readUnsignedByte();

Я думаю, что это должно быть так (с прямым порядком байтов):

header   = HEX: ab   = DEC: 171
flags    = HEX: 10   = DEC: 16
length   = HEX: ac03 = DEC: 940
checksum = HEX: ac9a = DEC: 39596
index    = HEX: cd09 = DEC: 2509
type     = HEX: 01   = DEC: 1

Но я получил следующие результаты:

header   = 63
flags    = 16
length   = 831
checksum = 16191
index    = 2367
type     = 1

Что я делаю неправильно или чего мне не хватает? Я пытаюсь понять, почему мои ожидания неверны (header выглядит как проблема со знаком, но это не объясняет других).

...