Шестнадцатеричная строка для bool [] C# - PullRequest
0 голосов
/ 14 апреля 2020

У меня есть шестнадцатеричная строка string hex = A5A6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9AAAAAAAAA9552, которую я хочу преобразовать в массив bool.

Я уже нашел функцию, которая может преобразовать ее в байтовый массив, но позже я обнаружил, что вместо этого мне нужен массив bool. Как я могу изменить эту функцию / создать новую, которая выполняет эту работу за меня?

private byte[] ConvertHexStringToByteArray(string hexString)
{
    if (hexString.Length % 2 != 0)
    {
        throw new ArgumentException(String.Format(CultureInfo.InvariantCulture, "The binary key cannot have an odd number of digits: {0}", hexString));
    }

    byte[] data = new byte[hexString.Length / 2];
    for (int index = 0; index < data.Length; index++)
    {
        string byteValue = hexString.Substring(index * 2, 2);
        data[index] = byte.Parse(byteValue, NumberStyles.HexNumber, CultureInfo.InvariantCulture);
    }

    return data;
}

Любая помощь приветствуется, чувствуя себя немного потерянной!

РЕДАКТИРОВАТЬ:

Если я, например, сталкиваюсь с шестнадцатеричным значением A5, я бы хотел вернуть массив bool, состоящий из:

bool =  {true, false, true, false, false, true, false, true, false, false, false, false, false, false, false, false}

1 Ответ

1 голос
/ 15 апреля 2020

На самом простом уровне, BitArray делает все, что вам нужно с вашим существующим кодом:

var bytes = ConvertHexStringToByteArray("A5");
var bits = new BitArray(bytes);
for(int i = 0; i < bits.Length; i++)
    Console.WriteLine(bits[i]);

Это выполняет свою работу и не требует каких-либо переделок, но это не так а bool[]; Честно говоря, я бы порекомендовал против a bool[] - это очень неэффективный способ хранения данных, но вы можете использовать BitArray, чтобы сделать это тоже , без необходимости дополнительной работы :

var bytes = ConvertHexStringToByteArray("A5");
var bits = new BitArray(bytes);
bool[] arr = new bool[bits.Length];
bits.CopyTo(arr, 0);
for (int i = 0; i < arr.Length; i++)
    Console.WriteLine(arr[i]);

Вы могли бы также переработать ConvertHexStringToByteArray для внутренней математики, но ... это, вероятно, не очень хорошая идея.

...