0

Java での型変換に再び苦労しています... から 5 バイトの値を読み取り、ByteBufferその値を に格納する必要がありlongます。

したがって、私はこれをしました:

    byte msb = b.get();
    int lsb = b.getInt();
    System.out.println(msb + " " + lsb);
    long number = ((msb << 32)) | (((long) lsb) & 0xFFFFFFFF);
    System.out.println(number);

ログには次の結果が表示されます。

1 376263385
376263385

したがって、msb と lsb は正しく読み取られますが、それらを結合すると、そこに lsb 値しか取得されません。値をビットマスクして、さまざまなタイプから読み取ろうとしましたが、それもうまくいきません。

4

2 に答える 2

1

これは、msb のタイプがバイトであり、32 ビット左にシフトするとゼロになるためです (バイトはちょうど 8 ビットです)。msb タイプを long に変更すれば問題ありません。

于 2013-10-20T11:13:13.420 に答える
1

これを試してみてください

long number = 0;
    number = number | (((long) msb << 32));
    number = number | ((lsb) & 0xFFFFFFFF);
    System.out.println(number);

1 バイトの長さはわずか 8 ビットであることを忘れないでください。したがって、バイトを 32 回左シフトすると、1 が失われます。したがって、msb を long にキャストする必要があります。次に、ビットマスキングを行います。

于 2013-10-20T11:19:23.130 に答える