簡體   English   中英

如何在字節數組上添加填充?

[英]How to add padding on to a byte array?

我在一個大小為8byteArray中有這個40位密鑰,我想向它添加0填充,直到它變為56位

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

有什么想法?

8字節數組是64位。 如果將數組初始化為

byte[] aKey = new byte [8]

所有字節都用0來初始化。 如果你設置前40位,即5個字節,那么你的其他3個字節,即從41到64位仍然設置為0.因此,默認情況下,從第41位到第56位設置為0並且你沒有不必重置它們。

但是,如果您的數組已經初始化了一些值,並且您想清除41到56之間的位,那么有幾種方法可以做到這一點。

第一:你可以設置aKey[5] = 0aKey[6] = 0這將把第6個再見和第7個字節(從第41位到第56位)設置為0

第二:如果你正在處理位,你也可以使用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();

注意: BitSet.valueOf(byte[])BitSet.toByteArray()僅存在於Java 7中。

使用System.arraycopy()在數組的開頭插入兩個字節(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));
}

Guava的com.google.common.primitives.Bytes.ensureCapacity

aKey = Bytes.ensureCapacity(aKey , 56/8, 0);

或者從JDK6開始使用Java本機工具:

aKey = java.util.Arrays.copyOf(aKey , 56/8);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM