byteMessageSerialNumber

byteMessageSerialNumber

我有使用此方法首先读取的数据流。

int messageSerialNumber = r.readUnsignedShort();


接下来,我将其转换为

byte[] byteMessageSerialNumber = new byte[2];
byteMessageSerialNumber[0] = (byte) messageSerialNumber;
byteMessageSerialNumber[1] = (byte) (messageSerialNumber >>> 8);


接下来,我构建一个更大的缓冲区数组并将其他数据添加到其中。

ByteBuffer bufReply = ByteBuffer.allocate(10);
bufReply.put(replyMessageID);
bufReply.put(byteMessageSerialNumber);
byte[] fullMessageReply=bufReply.array();


我想要的是byteMessageSerialNumber有2个字节,所以现在发生的是它没有多余的00

所以变成

05 01 00 27 36 81 82 01 2C


应该是

05 01 00 27 36 81 82 01 00 2C

最佳答案

解决方案很简单。像这样交换:

byteMessageSerialNumber[0] = (byte) (messageSerialNumber >>> 8);
byteMessageSerialNumber[1] = (byte) messageSerialNumber;


第一个字节应该是messageSerialNumber的第一个最高有效部分,第二个字节应该是messageSerialNumber的最后一个最低有效部分。

07-24 09:18