3

如何将 long 转换为 4 个字节?我正在接收来自 C 程序的一些输出,它使用无符号长。我需要读取此输出并将其转换为 4 个字节。

但是,java 使用 64 位的有符号长整数。有没有办法进行这种转换?

4

3 回答 3

9

要将 4 个字节读取为无符号 32 位值,假设它是小端序,最简单的做法是使用 ByteBuffer

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

虽然l可以是有符号的 64 位值,但它只会介于 0 和 2^^32-1 之间,这是无符号 32 位值的范围。

于 2013-01-01T11:03:22.160 回答
1

您可以使用 java.nio.ByteBuffer。它可以解析长字节,并为您进行字节排序。

于 2013-01-01T07:43:24.213 回答
1

您可以编写一个循环,将“long”除以 256,取其余部分,然后得到“Least Significant Byte”……(取决于您想要 little-endian 还是 big-endian,您可以向前或向后循环)

  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 回答