将bool数组编码为ushort

时间:2017-03-22 00:48:16

标签: c# arrays encoding bit

假设我们有一个布尔值数组,有些是真的,有些是假的。 我喜欢生成ushort并根据数组设置位。

A ushort由2个字节组成, - 构成16位。

所以数组中的第一个bool需要设置ushort的第一位,如果它是真的,否则该位将为0。 需要对ushort中的每个位重复此操作。

我如何设置一个方法存根,它将一个bool数组作为输入并返回编码的ushort? (C#)

2 个答案:

答案 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
    {
    }
}