Java如何使用inputstream读取unsigned short?

时间:2013-11-04 04:54:11

标签: java unsigned-integer

C ++客户端向Java Server发送一个字节数组。前两个字节表示剩余字节数组的长度。客户端使用unsigned short,但java中没有unsigned short。如何读取前两个字节在我的服务器上?

另一个问题是,在C ++中,第一个字节表示低8位,第二个字节表示高8位。例如,两个字节是35 02,它转换为十进制应该是565,而不是13570。

我的java代码如下:

    DataInputStream dis = new DataInputStream(is);
    int b1 = dis.readUnsignedByte();
    int b2 = dis.readUnsignedByte();
    int length = (b2 << 8) | b1;

它似乎有效。但我不能确定它在任何情况下都是准确的。我希望你的建议.thx~

2 个答案:

答案 0 :(得分:2)

要将unsigned short转换为signed int,您可以

int value = dis.readShort() & 0xFFFF;

您的其他问题与字节顺序有关。我建议您查看ByteBuffer,您可以使用订购方法指定字节顺序。

答案 1 :(得分:2)

呃,DataInputStream.readUnsignedShort()

  

我不能确定它在任何情况下都是准确的

您无法测试65536个值吗?这并不难。