有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在字节数组中插入一位

我试图在字节数组中插入一个位,这会将字节数组中的所有位向左移动

假设我有一个Java字节数组,如下所示:

byte[] byteArray = new byte[2];
byteArray[0] = 0x11
byteArray[1] = 0x00

在二进制中,这个字节数组表示为:

0001 0001 0000 0000

现在我想在第三位位置插入一个零(丢失字节数组中的最后一位),结果是:

0000 1000 1000 0000

在Java中有什么简单的方法可以做到这一点吗?我知道BigInteger类可以将整个字节数组转换为二进制字符串(然后以这种方式插入并转换回),但这似乎效率低下

提前谢谢


共 (2) 个答案

  1. # 1 楼答案

    棘手的一点是将角色移动到你真正想插入的位置,因为你只想移动其中的一部分。这可以通过以下函数实现:

    public static char shift(char in, char n, char v)
    {
        char lowMask = (1 << n) - 1;
        char highMask = 0xFF ^ lowMask;
    
        return (in & lowMask) | ((in & highMask) << 1) | ((v&1) << n);
    }
    

    将位插入第一个字符后,还必须移动数组的其余部分。只需将一位右移(<;<;1),并将下一个字符的最低有效位(LSB)设置为最后一个字符的最高有效位(MSB)的状态,就可以实现这一点

  2. # 2 楼答案

    查看BitSet类。它可以做你需要的事情,非常简单