0

我有以下内容:

byte[] l = ByteBuffer.allocate(16).putInt(N).array();

但它将字节放在数组的开头而不是结尾我如何把它放在结尾?我也尝试过以下方法:

byte[] l = ByteBuffer.allocate(16).putInt(15 - (int)Math.ceil((Math.log(N)/Math.log(2))/8), N * 8).array();

但似乎适用于某些数字,但在其他数字中得到 ArrayIndexOutOfBoundsIndexException (它们低于 2 16

4

2 回答 2

1

它将字节放在数组的开头而不是末尾我如何将它放到末尾?我也尝试过以下方法:

这就是问题所在。尽管您调用ByteBuffer.allocate(16),但这只是将容量设置为 16,但您的缓冲区仍然是空的。因此,当您尝试在索引 15 处添加内容时,那里什么也没有,您会得到一个 ArrayIndexOutOfBoundsException,因为缓冲区的大小仍然为 0,而您正在访问索引 15。在缓冲区填满之前,您无法写入缓冲区的末尾那个索引。

于 2012-09-13T20:33:27.583 回答
0

如前所述,ByteBuffer.putInt 将始终写入 4 个字节。那么怎么样

byte[] l = ByteBuffer.allocate(12).putInt(N).array();

以下程序显示了差异:

  int N = 99;

  byte[] l = ByteBuffer.allocate(16).putInt(N).array();
  System.out.println("N at start: " + DatatypeConverter.printHexBinary(l));

  l = ByteBuffer.allocate(16).putInt(12,N).array();
  System.out.println("N at end:   " + DatatypeConverter.printHexBinary(l));

打印出以下内容:

N at start: 00000063000000000000000000000000 
N at end:   00000000000000000000000000000063
于 2012-09-13T21:11:15.717 回答