Java 从终端发送的十六进制信道缓冲解码

Java 从终端发送的十六进制信道缓冲解码,java,encoding,hex,netty,Java,Encoding,Hex,Netty,我正在尝试解码外部设备发送的包。我能够捕获发送的数据,并尝试模拟设备与终端的连接,如下所示: 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"))

我正在尝试解码外部设备发送的包。我能够捕获发送的数据,并尝试模拟设备与终端的连接,如下所示:

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();
我想应该是这样的(带小endian):

但我得到了以下结果:

header   = 63
flags    = 16
length   = 831
checksum = 16191
index    = 2367
type     = 1
我做错了什么?我错过了什么?我试图理解为什么我的期望是不正确的(
标题
看起来像符号问题,但它不能解释其他问题)

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