c# - 如何在 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# - 左移整个字节数组
解决方案
我不能很好地理解您的问题,但在这里我向您展示如何连接位。
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");
}
推荐阅读
- regex - 正则表达式解析姓氏和名字的字符串,其中姓氏可能是大写和/或连接的
- javascript - 如何等待来自 API 的数据作为组件中的道具?
- c++ - VkKeyScanExA 所有 TCHAR 选项列表
- javascript - 使用 fetch 和 promise all 请求多个 url 时处理 500 和其他错误
- android - Android App 在片段之间使用 Args 和 Room 时崩溃
- javascript - D3 TimeParse 格式化
- javascript - mongoDB中模型“User”的路径“_id”的值(类型对象)转换为ObjectId失败
- javascript - 如果选择了某个复选框,我该如何做到这一点,以便在文本框中需要输入?
- javascript - 访问对象的对象
- google-api - Google Translate API 是否返回翻译文本并为中文提供拼音或为日语提供平假名?