简单的问题:考虑到bool(true,false)与位(1,0)相同,将8个bool转换为C#中的字节的正确方法是什么?
示例:
true,true,true,true,true,true,true,true == 11111111 == 255
true,false,false,false,false,false,false,false == 10000000 == 128
false,false,false,false,false,false,false,false == 00000000 == 0
以上是第一部分。我想创建一个扩展方法,如:
public static byte[] ToByteArray(this bool[] bitArray)
{
// stuff here
return byteArray;
}
结果必须是byteArray,其元素比bool数组少八倍。
答案 0 :(得分:11)
您可能正在搜索BitArray Constructor (Boolean[])
为表示位,您在BitArray
中有特殊结构C#
。
所以你的代码看起来像这样:
var booleans = new bool[]{true, false, false, false};
var bitArray = new BitArray(booleans);
答案 1 :(得分:1)
强大的解决方案(以防万一)。
将它们分成8组(取决于顺序以及如何调整它们 - 到LSB
或RSB
),然后通过调用形成一个数组这个方法在循环中:
byte GetByte(bool[] bytes)
{
byte result = 0;
for(int i = 0; i < bytes.Length; i++)
if(byte[i])
result |= 1 << i;
return result;
}