如何在字节数组上添加填充?

8

我有一个大小为8byteArray,其中包含一个40位的密钥,我想要添加0填充直到它成为56位

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

有什么想法吗?(涉及IT技术)

不确定我是否理解您的问题,请确认:您有一个大小为8的字节数组,其中存储了一个40位的密钥(即5个字节),您想要在未设置的位(或0)左侧填充(或前置)直到第56位。我的理解正确吗? - Srikanth Reddy Lingala
是的,你说得对,我相信。 - Napmi
3个回答

9
一个8字节的数组等同于64位。如果你将该数组初始化为:
byte[] aKey = new byte [8]

所有字节都被初始化为0。如果您设置了前40位,即5个字节,则其他3个字节,即从第41位到第64位仍然设置为0。因此,默认情况下,您从第41位到第56位设置为0,您不必重置它们。
但是,如果您的数组已经使用某些值进行了初始化,并且您想要清除从41到56的位,有几种方法可以做到这一点。
首先:您可以只设置aKey [5] = 0和aKey [6] = 0。这将使第6个字节和第7个字节归零,它们组成了从第41位到第56位。 第二点: 如果您正在处理位,也可以使用 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()

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
我会在方法 printArray(byte[] array) 中使用 System.out.println(Arrays.toString(array)); 来打印一个数组。 - Srikanth Reddy Lingala
当然,好的评论。我很少使用基本的Java数组 :) - Stanislav Mamontov

1

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

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

或者自JDK6起使用Java本地工具:
aKey = java.util.Arrays.copyOf(aKey , 56/8);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接