2013-10-20 24 views
3

我有这个40位大小的byteArray关键,我想0填充添加到它,直到它变得56位如何将填充添加到字节数组?

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

任何想法如何?

+0

不知道如果我收到了你的问题的权利,请你确认:你有大小8的字节数组存储40位密钥(即5个字节),并且您想要将未置位(或0)填充(或预先)到第56位。我的理解是正确的吗? – SrikanthLingala

+0

你是对的我相信。 – Napmi

回答

7

一个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之前的版本,则下面的一些方法不存在,您必须编写your own methods将字节数组转换为位组,反之亦然。

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

4

使用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)); 
} 
+1

我会使用'System.out.println(Arrays.toString(array));'方法'printArray(byte [] array)'打印出一个数组 – SrikanthLingala

+0

当然,好评。我使用基本的Java数组真的很少:) –