7

サイズ8のこの40 ビットキーがあり、56 ビットになるまで 0 パディングを追加したいと考えています。byteArray

byte[] aKey = new byte [8];  // How I instantiated my byte array

どのようにアイデアはありますか?

4

3 に答える 3

9

8 バイト配列は 64 ビットです。配列を次のように初期化する場合

byte[] aKey = new byte [8]

すべてのバイトは 0 で初期化されます。最初の 40 ビット、つまり 5 バイトを設定した場合、残りの 3 バイト、つまり 41 ~ 64 ビットはまだ 0 に設定されています。したがって、デフォルトでは 41 ビット目から 56 ビット目までが 0 に設定されています。それらをリセットする必要はありません。

ただし、配列がすでにいくつかの値で初期化されており、41 から 56 までのビットをクリアしたい場合は、いくつかの方法があります。

最初に: 設定するだけaKey[5] = 0aKey[6] = 0、41 番目から 56 番目のビットを構成する 6 番目の bye と 7 番目のバイトが 0 に設定されます。

2 番目:ビットを扱う場合は、BitSet も使用できます。ただし、あなたの場合、最初のアプローチははるかに簡単だと思います。特に、Java 7より前の場合、以下のメソッドのいくつかが存在せず、バイト配列からビットセットに、またはその逆に変換する独自のメソッドを作成する必要があります.

byte[] b = new byte[8];
BitSet bitSet = BitSet.valueOf(b);
bitSet.clear(41, 56); //This will clear 41st to 56th Bit
b = bitSet.toByteArray();

注: Java 7 からのみ存在しますBitSet.valueOf(byte[])BitSet.toByteArray()

于 2013-10-20T08:18:51.807 に答える
4

System.arraycopy() を使用して、配列の先頭に 2 バイト (56-40 = 16 ビット) を挿入します。

static final int PADDING_SIZE = 2;

public static void main(String[] args) {
    byte[] aKey = {1, 2, 3, 4, 5, 6, 7, 8}; // your array of size 8
    System.out.println(Arrays.toString(aKey));
    byte[] newKey = new byte[8];
    System.arraycopy(aKey, 0, newKey, PADDING_SIZE, aKey.length - PADDING_SIZE); // right shift
    System.out.println(Arrays.toString(newKey));
}
于 2013-10-20T08:02:13.130 に答える