0

C++ クライアントはバイト配列を Java サーバーに送信します。最初の 2 バイトは残りのバイト配列の長さを示します。クライアントは unsigned short を使用しますが、java には unsigned short はありません。サーバーで最初の 2 バイトを読み取るにはどうすればよいですか? ?

また、別の問題として、C++ では、最初のバイトが下位 8 ビットを示し、2 番目のバイトが上位 8 ビットを示します。

私の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

unsigned short を signed int に変換するには、次のことができます

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

あなたの他の問題は、バイトオーダーに関係しています。order メソッドを使用してバイトオーダーを指定できるByteBufferを確認することをお勧めします。

于 2013-11-04T04:58:46.960 に答える