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

4
有没有一种简单的方法将布尔值数组转换为8位十六进制等效值?例如,如果我有以下布尔值数组:
 bool[] BoolArray = new bool[] { true,false,true,true,false,false,false,true };

如果真值为1,假值为0,那么我希望有一种方法或函数将上述数组转换为0xB1(10110001)。是否存在这样的函数或方法来实现?顺便说一句,我在使用C#。
3个回答

10

是的,你可以使用BitArray类。像这样应该就可以实现:

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

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

string hex = BitConverter.ToString(data);

这个方法可行,但我一直忘记回复!感谢你的帮助! - Icemanind

2

您好,关于这个问题

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"); }

注意:一位编辑指出arr [0]最低有效位(LSB),但他期望的是最高有效位(MSB)。这是API考虑因素,如果你喜欢将你的LSB放在arr[length-1],只需在传递给该函数之前翻转数组即可。


最佳答案,允许非8位编码。 - Soleil

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

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;

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接