将 8 个布尔值转换为 1 个字节的正确方法
本文关键字:字节 方法 布尔值 转换 | 更新日期: 2023-09-27 18:30:52
简单的问题:考虑到布尔值(真,假)与位(1,0)相同,在C#中将八个布尔值转换为一个字节的正确方法是什么?
例子:
真,真,真,真,真,真,真,真== 11111111 == 255
真,假,假,假,假,假,假,假== 10000000 == 128
假,假,假,假,假,假,假 == 00000000 == 0
以上是第一部分。我想创建一个扩展方法,如下所示:
public static byte[] ToByteArray(this bool[] bitArray)
{
// stuff here
return byteArray;
}
结果必须是一个字节数组,它包含的元素比布尔数组少八倍。
你大概在搜索BitArray Constructor (Boolean[])
对于放射位,您在C#
中具有特殊的结构BitArray
。所以你的代码看起来像这样:
var booleans = new bool[]{true, false, false, false};
var bitArray = new BitArray(booleans);
强大的解决方案(以防万一)。
以某种方式将它们分成 8 组(取决于顺序和您想要如何调整它们 - LSB
或RSB
),然后通过在循环中调用此方法形成一个数组:
byte GetByte(bool[] bits)
{
byte result = 0;
for(int i = 0; i < bits.Length; i++)
if(byte[i])
result |= 1 << i;
return result;
}