Преобразование логического массива в шестнадцатеричное число - PullRequest
3 голосов
/ 04 апреля 2011

Есть ли простой способ преобразовать массив логических значений в 8-битные шестнадцатеричные эквиваленты? Например, если у меня есть

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

Если истинные значения = 1 и ложные значения = 0, то я хотел бы, чтобы метод или функция преобразовали вышеуказанный массив в 0xB1 (10110001).

Существует ли такая функция или метод для этого? Кстати, я использую C #.

Ответы [ 2 ]

8 голосов
/ 04 апреля 2011

Да, вы можете использовать класс BitArray. Примерно так должно это сделать:

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

Если под "8-битным шестнадцатеричным" вы подразумеваете строковое представление, вы можете использовать для этого класс BitConverter:

string hex = BitConverter.ToString(data);
0 голосов
/ 20 апреля 2016

Как насчет

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

отказ от ответственности: не проверено

...