如何在C#或字节数组左移操作中执行位复制

问题描述 投票:-7回答:1

我想以级联方式将信息存储在字节数组(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

c# bit
1个回答
0
投票

我不太理解您的问题,但在这里我向您展示如何连接位。

        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");
        }
© www.soinside.com 2019 - 2024. All rights reserved.