Java转换为4个字节

时间:2013-01-01 05:47:06

标签: java bytearray byte long-integer unsigned

如何将long转换为4个字节?我从C程序接收一些输出,它使用unsigned long。我需要读取此输出并将其转换为4个字节。

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

3 个答案:

答案 0 :(得分: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位值的范围。

答案 1 :(得分:1)

你可以编写一个循环,你将“long”除以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;
  }

答案 2 :(得分:1)

您可以使用java.nio.ByteBuffer。它可以解析long,它会为你执行字节排序。