假设我们有一个布尔值数组,有些是真的,有些是假的。
我喜欢生成ushort
并根据数组设置位。
A ushort
由2个字节组成, - 构成16位。
所以数组中的第一个bool需要设置ushort
的第一位,如果它是真的,否则该位将为0。
需要对ushort
中的每个位重复此操作。
我如何设置一个方法存根,它将一个bool数组作为输入并返回编码的ushort? (C#)
答案 0 :(得分:2)
您可以使用BitConverter类(https://msdn.microsoft.com/en-us/library/bb384066.aspx)以便从字节转换为int,并使用二进制操作(如此StackOverflow问题:How can I convert bits to bytes?)将比特转换为字节
例如:
//Bools to Bytes...
bool[] bools = ...
BitArray a = new BitArray(bools);
byte[] bytes = new byte[a.Length / 8];
a.CopyTo(bytes, 0);
//Bytes to ints
int newInt = BitConverter.ToInt32(bytes); //Change the "32" to however many bits are in your number, like 16 for a short
这只适用于一个int,所以如果你在一个位数组中有多个int,你需要拆分数组才能使用这个方法。
答案 1 :(得分:1)
BitArray可能更适合您的用例:https://msdn.microsoft.com/en-us/library/system.collections.bitarray(v=vs.110).aspx
bool[] myBools = new bool[5] { true, false, true, true, false };
BitArray myBA = new BitArray(myBools);
foreach (var value in myBA)
{
if((bool)value == true)
{
}
else
{
}
}