我想以级联方式将信息存储在字节数组(2位+ 6字节+ 14位)中,但是我不知道该怎么做。使用Buffer.Blockcopy
,我可以使用字节而不是位。此外,6字节数据已经是数据结构的一部分,并且在各处都引用,因此我不想更改该变量。我当时想声明一个字节,然后进行二进制字符串切割和连接,但是我认为这将是一个非常糟糕的实现。必须有一种更好,更有效的方法来进行此操作。
这是我当前正在使用的C#脚本,但我认为必须有更好且有效的方法来执行此操作。
byte[] ARC = new byte[7]{0x00,0xB1,0x1C,0x3D,0x4C,0x1A,0xEF};
RotateLeft(ARC);
RotateLeft(ARC);
RotateLeft(ARC);
RotateLeft(ARC);
RotateLeft(ARC);
RotateLeft(ARC);
//temp = Convert.ToString(ARC[1], 2).PadLeft(8,'0');
//MessageBox.Show(temp.ToString());
//MessageBox.Show(ByteArrayToString(ARC));
ARC[0] |= 1 << 6;
ARC[0] |= 1 << 7;
byte SB = 0x02;
string Hex = Convert.ToString(SB, 2);
Hex = Hex.Substring(0, 2);
Hex += "000000";
byte SB_processed = Convert.ToByte(Hex,2);
SB_processed |= 1 << 0;
SB_processed |= 1 << 1;
SB_processed |= 1 << 2;
SB_processed |= 1 << 3;
SB_processed |= 1 << 4;
SB_processed |= 1 << 5;
ARC[0] &= SB_processed;
MessageBox.Show(ByteArrayToString(ARC));
从此参考资料中获取左移逻辑。c# - left shift an entire byte array
我不太理解您的问题,但在这里我向您展示如何连接位。
byte bits2 = 0b_000000_10;
byte bits6 = 0b_00_101100;
ushort bits14 = 0b_00_10110010001110;
uint concatenated = ((uint)bits2 << 20) + ((uint)bits6 << 14) + (uint)bits14;
uint test = 0b_00_10_101100_10110010001110;
if (concatenated == test)
{
Console.WriteLine("Ok");
}