首页 > 解决方案 > 如何在 C# 或字节数组左移操作中执行位复制

问题描述

我想以连接方式将信息存储在字节数组(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# - 左移整个字节数组

标签: c#bit

解决方案


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

        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");
        }

推荐阅读