设置数组中字节的LSB
本文关键字:LSB 字节 数组 设置 | 更新日期: 2023-09-27 18:15:59
我有两个字节数组:ary_a
和ary_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
依此类推。
尝试以下的代码
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的解决方案。