将布尔数组转换为十六进制数

时间:2011-04-04 00:35:38

标签: c# .net binary boolean

是否有一种简单的方法可以将布尔值数组转换为8位十六进制等效值?例如,如果我有

 bool[] BoolArray = new bool[] { true,false,true,true,false,false,false,true };

如果true值= 1且false值= 0,那么我想要一个将上述数组转换为0xB1(10110001)的方法或函数。

是否存在这样的功能或方法?顺便说一下,我正在使用C#。

3 个答案:

答案 0 :(得分:8)

是的,您可以使用BitArray课程。这样的事情应该这样做:

BitArray arr = new BitArray(BoolArray);
byte[] data = new byte[1];
arr.CopyTo(data, 0);

如果用“8位十六进制”表示字符串表示,则可以使用BitConverter类:

string hex = BitConverter.ToString(data);

答案 1 :(得分:0)

怎么样

static int BoolArrayToInt(bool[] arr)
{
    if (arr.Length > 31)
        throw new ApplicationException("too many elements to be converted to a single int");
    int val = 0;
    for (int i = 0; i < arr.Length; ++i)
        if (arr[i]) val |= 1 << i;
    return val;
}

static string ToHexStr(int i) { return i.ToString("X8"); }

免责声明:未经测试

答案 2 :(得分:0)

二进制部分可以通过以下方法实现:

bool[] boolArray = {true, false, true}将给出 101

int BoolArrayToInt(bool[] bArray)
{

    char[] caseChar = new char[bArray.Length];

    for(int i = 0; i < bArray.Length; i++)
    {
        if (bArray[i] == true)
        {
            caseChar[i] = '1';
        }
        else
        {
            caseChar[i] = '0';
        }
    }

    string caseString = new string(caseChar);
    int caseNum = System.Convert.ToInt32(caseString);
    return caseNum;

}