0

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

还有一个问题是,在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~

4

2 回答 2

3

错,DataInputStream.readUnsignedShort()

我无法确保它在任何情况下都是准确的

你不能测试 65536 个值?这并不难。

于 2013-11-04T04:59:40.243 回答
1

要将无符号的 short 转换为有符号的 int,您可以这样做

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

您的另一个问题与字节顺序有关。我建议看一下ByteBuffer,您可以使用 order 方法指定字节顺序。

于 2013-11-04T04:58:46.960 回答