Я пытаюсь декодировать пакеты, отправленные внешним устройством. Мне удалось перехватить отправленные данные, и я пытаюсь смоделировать соединение устройства с терминалом, например так:
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
выглядит как проблема со знаком, но это не объясняет других).