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 に答える