c# - BitArray 转换和数据长度

标签 c# .net bitarray

我正在创建一个软件包,它一次接受 16 个 bool 值,将它们放入一个位数组中,然后将它们发送到 PLC 以供 PLC 解包和使用。我的问题有两个:

1) 如果我创建一个 BitArray(16),它是否只占用 16 位数据,或者 BitArray 对象是否自动包含额外的数据作为对象的一部分(我假设它只有 16 位,但找不到到目前为止,已经得到了很好的确认)和

2) PLC 需要一个 16 位整数(短整型),以便通信耦合器根据需要工作,因此我想我可以简单地将 BitArray 转换为短整型,但我需要一个 1 和 0 的列表,而不是“真”和“假”——那么最好的方法是什么?下面是我想到的一些示例代码:

/*  Pack bits into a container to send them as one item */
var bitContainer_1 = new BitArray(16);
bitContainer_1[0] = result.Toggle_Signal;
bitContainer_1[1] = result.Auto_RFO;
bitContainer_1[2] = result.Spare_1;
bitContainer_1[3] = result.Spare_2;
bitContainer_1[4] = result.HMI_Horn_Necessary;
bitContainer_1[5] = result.HMI_Horn_Urgent;
bitContainer_1[6] = result.HMI_Horn_Emergency;
bitContainer_1[7] = result.Spare_3;
bitContainer_1[8] = result.Sys_1_Auto_Ready;
bitContainer_1[9] = result.Sys_1_Auto_Active;
bitContainer_1[10] = result.Spare_4;
bitContainer_1[11] = result.Spare_5;
bitContainer_1[12] = result.Sys_2_Auto_Ready;
bitContainer_1[13] = result.Sys_2_Auto_Active;
bitContainer_1[14] = result.Spare_6;
bitContainer_1[15] = result.Spare_7;
short packagedBits_1 = Convert.ToInt16(bitContainer_1);

我以为我可以在进入 bitContainer 之前对 bool 值执行一些操作,将它们转换为 1 或 0,但发现这似乎不起作用,所以我想看看有什么/全部我的选择可能是避免大量 if(true){var = 1} else{var = 0} 类型的场景,因为我对此类任务相当不熟悉。由于这些通信将负责机器行为,因此减少打包和发送它们的开销和时间至关重要。

最佳答案

1) BitArry(16) 比 16 位占用更多空间。尝试使用 ushort 来表示恰好需要 16 位的内容。

2) 如果您想要速度,我建议您使用 ushort 并对其执行按位运算。你可以这样设置:

    bitContainer = (ushort)(result.Spare_7 << 15 | result.Spare_6 << 14...)

然后您可以根据需要设置或重置每个位。

编辑:按位或运算符“|”此处用于将每个条目位链接到最终的 ushort 变量中。 “<<”运算符将值向左移动 n 位,因此这会将 result.xxxx 中的每个 1 或 0 引入到 bitContainer 中的正确位置。

关于c# - BitArray 转换和数据长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35921842/

相关文章:

c# - Visual Studio 重构变量类型

c# - 由于格式化,XML 反序列化在十进制解析时崩溃

.net - 根源是什么?

压缩稀疏位数组

c# - 非虚拟接口(interface) (NVI) 惯用法在 C# 中是否与在 C++ 中一样有用?

c# - 更改 SQLiteConnectionStringBuilder 参数使 C# 中写入数据库的速度更快

c# - MVC 映射到模型中可为空的 bool 值

c# - 使用正则表达式删除 css 注释

c++ - 将位转换为值

python - Numba 的最佳可能位数组