C# 将8个布尔值转换为1字节的正确方法
简单问题:考虑到bool(true,false)与位(1,0)相同,在C#中将八个bool转换为一个字节的正确方法是什么 示例: 真的,真的,真的,真的,真的,真的,真的==11111111==255 真,假,假,假,假,假,假,假==10000000==128 false,false,false,false,false,false==00000000==0 以上是第一部分。我想创建一个扩展方法,如下所示:C# 将8个布尔值转换为1字节的正确方法,c#,optimization,boolean,byte,C#,Optimization,Boolean,Byte,简单问题:考虑到bool(true,false)与位(1,0)相同,在C#中将八个bool转换为一个字节的正确方法是什么 示例: 真的,真的,真的,真的,真的,真的,真的==11111111==255 真,假,假,假,假,假,假,假==10000000==128 false,false,false,false,false,false==00000000==0 以上是第一部分。我想创建一个扩展方法,如下所示: public static byte[] ToByteArray(this bo
public static byte[] ToByteArray(this bool[] bitArray)
{
// stuff here
return byteArray;
}
结果必须是一个byteArray,它包含的元素比布尔数组少八倍。您可能正在搜索 对于表示位,在
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;
}
byte-GetByte(bool[]位)
{
字节结果=0;
for(int i=0;i 结果|=1您正在询问如何将8个bool转换为一个字节,但您的示例方法是返回一个字节数组。是的,正如我所说,byteArray是第二部分,首先我需要将8个bool转换为1个bytei这是一个很好的解决方案,但是在指定长度并使用SetAll(true)
时,请注意错误,因为这将导致-1(表示整数的所有位),而不是给定的长度。那么,如何从中返回字节[]?@Guilherme:CopyTo()
@Guilherme@LS\u dev,是的,谢谢。我提到过,应该首先为方法准备字节
,但您可以添加绑定检查并抛出ArgumentOutOfRangeException
或其他任何东西,如果您愿意,这只是一个将任何内容转换为位是多么容易的示例。