设置数组中字节的LSB

本文关键字:LSB 字节 数组 设置 | 更新日期: 2023-09-27 18:15:59

我有两个字节数组:ary_aary_b,大小相同。

我想将ary_a中每个字节的LSB设置为与ary_b中每个字节相同的LSB。例如:

数组中的第一个字节:

ary_a[0] = 10110110
ary_b[0] = 00101011
//then ary_a[0] will be:
ary_a[0] = 10110111

第二字节:

ary_a[1] = 10110111
ary_b[1] = 00101011
//then ary_a[1] will be:
ary_a[1] = 10110111 //does not change 

第三:

ary_a[2] = 10110111
ary_b[2] = 00101010
//then ary_a[2] will be:
ary_a[2] = 10110110

依此类推。

设置数组中字节的LSB

尝试以下的代码

var ary_a = new byte[]
{
    182, //1011 0110
    183, //1011 0111
    183  //1011 0111
};
var ary_b = new byte[]
{
    43,  //0010 1011
    43,  //0010 1011
    42   //0010 1010
};
for(var i = 0; i<3; i++)
{
    ary_a[i] = (byte)((ary_a[i] & ~1)|(ary_b[i] & 1));
    // print output
    Console.WriteLine(Convert.ToString(ary_a[i], 2).PadLeft(8, '0'));
}

输出:

10110111
10110111
10110110

Fiddle:https://dotnetfiddle.net/0xQ342

for (int index = 0; index < ary_a.Length; index++)
    {
        int aLeast = LeastSigBit(ary_a[index]);
        int bLeast = LeastSigBit(ary_b[index]);
        ary_a[index] = bLeast == 1 ? (byte)(ary_a[index] | 1) : (byte)(~(1) & ary_a[index]);
    }
public static int LeastSigBit(int value)
{
    return (value & 1);
}

首先从每个字节数组索引中获取最低有效位,然后根据其值0或1设置ary_a[index]。如果对1进行OR运算,则得到最后一个位集如果与~1进行AND运算,则会得到最后一个未设置的位。如果你对1进行AND运算,你将得到最低有效位。这个解决方案适用于有符号的int,所以您可以基于相同的逻辑来考虑适用于无符号的int的解决方案。