Как преобразовать строку битов к массиву байтов

У меня есть строка, представляющая биты, такие как:

"0000101000010000"

Я хочу преобразовать его для получения массива байтов, таких как:

{0x0A, 0x10}

Число байтов является переменным, но там будет всегда дополнять для формирования 8 битов за байт (таким образом, 1010 становится 000010101).

5
задан Roast 7 June 2010 в 13:03
поделиться

4 ответа

Используйте встроенную функцию Convert.ToByte () и читайте куски по 8 символов, не изобретая ничего заново ..

Если это не что-то, что должно научить вас побитовым операциям.

Обновление:


Кража у Адама (и, вероятно, чрезмерное использование LINQ. Это может быть слишком кратко, и обычный цикл может быть лучше, в зависимости от ваших собственных (и ваших предпочтений коллег!) Предпочтений):

public static byte[] GetBytes(string bitString) {
    return Enumerable.Range(0, bitString.Length/8).
        Select(pos => Convert.ToByte(
            bitString.Substring(pos*8, 8),
            2)
        ).ToArray();
}
8
ответ дан 13 December 2019 в 22:02
поделиться

Получить символы в группах по восемь и преобразовать в байт:

string bits = "0000101000010000";

byte[] data =
  Regex.Matches(bits, ".{8}").Cast<Match>()
  .Select(m => Convert.ToByte(m.Groups[0].Value, 2))
  .ToArray();
0
ответ дан 13 December 2019 в 22:02
поделиться
public static byte[] GetBytes(string bitString)
{
    byte[] output = new byte[bitString.Length / 8];

    for (int i = 0; i < output.Length; i++)
    {
        for (int b = 0; b <= 7; b++)
        {
            output[i] |= (byte)((bitString[i * 8 + b] == '1' ? 1 : 0) << (7 - b));
        }
    }

    return output;
}
2
ответ дан 13 December 2019 в 22:02
поделиться

Это должно привести вас к ответу: Как преобразовать биты в байты?

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

0
ответ дан 13 December 2019 в 22:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: