Как преобразовать строку битов в байтовый массив - PullRequest
5 голосов
/ 07 июня 2010

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

"0000101000010000"

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

{0x0A, 0x10}

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

Ответы [ 7 ]

8 голосов
/ 07 июня 2010

Используйте встроенный 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();
}
2 голосов
/ 20 июля 2011

Вот быстрое и простое решение (и я думаю, оно будет соответствовать всем вашим требованиям): http://vbktech.wordpress.com/2011/07/08/c-net-converting-a-string-of-bits-to-a-byte-array/

2 голосов
/ 07 июня 2010
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;
}
0 голосов
/ 11 февраля 2014

Вы можете перейти любой из ниже,

        byte []bytes = System.Text.Encoding.UTF8.GetBytes("Hi");
        string str = System.Text.Encoding.UTF8.GetString(bytes);


        byte []bytesNew = System.Convert.FromBase64String ("Hello!");
        string strNew = System.Convert.ToBase64String(bytesNew);
0 голосов
/ 30 августа 2013
private static byte[] GetBytes(string bitString)
{
    byte[] result = Enumerable.Range(0, bitString.Length / 8).
        Select(pos => Convert.ToByte(
            bitString.Substring(pos * 8, 8),
            2)
        ).ToArray();

    List<byte> mahByteArray = new List<byte>();
    for (int i = result.Length - 1; i >= 0; i--)
    {
        mahByteArray.Add(result[i]);
    }

    return mahByteArray.ToArray();
}

private static String ToBitString(BitArray bits)
{
    var sb = new StringBuilder();

    for (int i = bits.Count - 1; i >= 0; i--)
    {
        char c = bits[i] ? '1' : '0';
        sb.Append(c);
    }

    return sb.ToString();
}
0 голосов
/ 07 июня 2010

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

string bits = "0000101000010000";

byte[] data =
  Regex.Matches(bits, ".{8}").Cast<Match>()
  .Select(m => Convert.ToByte(m.Groups[0].Value, 2))
  .ToArray();
0 голосов
/ 07 июня 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...