3

long を 4 バイトに変換するにはどうすればよいですか? C プログラムからの出力を受け取り、unsigned long を使用しています。この出力を読み取り、これを 4 バイトに変換する必要があります。

ただし、Java は 64 ビットの signed long を使用します。この変換を行う方法はありますか?

4

3 に答える 3

9

符号なし 32 ビット値として 4 バイトを読み取るには、それがリトルエンディアンであると仮定すると、ByteBuffer を使用するのが最も簡単です。

byte[] bytes = { 1,2,3,4 };
long l = ByteBuffer.wrap(bytes)
                   .order(ByteOrder.LITTLE_ENDIAN).getInt() & 0xFFFFFFFFL;

符号付き 64 ビット値にlすることができますが、符号なし 32 ビット値の範囲である 0 から 2^32-1 の間になります。

于 2013-01-01T11:03:22.160 に答える
1

「ロング」を256で割り、残りを取り、「最下位バイト」を取得するループをコーディングできます...(リトルエンディアンとビッグエンディアンのどちらが必要かによって、前方または後方にループできます)

  long l = (3* 256 * 256 * 256 + 1 * 256 *256 + 4 * 256 + 8);
  private byte[] convertLongToByteArray(long l) {
      byte[] b = new byte[4];
      if(java.nio.ByteOrder.nativeOrder() == ByteOrder.LITTLE_ENDIAN){
          for (int i=0; i<4; i++) {
            b[i] = (byte)(l % 256) ;
            l = l / 256;
          }
     }else{
          for (int i=3; i>=0; i--) {
            b[i] = (byte)(l % 256) ;
            l = l / 256;
          }
     }
      return b;
  }
于 2013-01-01T05:49:48.857 に答える
1

java.nio.ByteBuffer を使用できます。long を解析でき、バイトの順序付けを行います。

于 2013-01-01T07:43:24.213 に答える