代码之家  ›  专栏  ›  技术社区  ›  user8012596

Java整数仅转换为2字节数组,缺少额外的00

  •  0
  • user8012596  · 技术社区  · 7 年前

    我有一个数据流,我第一次使用这种方法读取。

    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
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   TEXHIK    7 年前

    解决方案很简单。交换方式如下:

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

    第一个字节应该是第一个, 最重要的 部分 messageSerialNumber ,第二个字节应该是最后一个, 最不重要 部分 消息序列号 .