У меня есть строка, представляющая биты, такие как:
"0000101000010000"
Я хочу преобразовать его для получения массива байтов, таких как:
{0x0A, 0x10}
Число байтов является переменным, но там будет всегда дополнять для формирования 8 битов за байт (таким образом, 1010 становится 000010101).
Используйте встроенную функцию 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();
}
Получить символы в группах по восемь и преобразовать в байт:
string bits = "0000101000010000";
byte[] data =
Regex.Matches(bits, ".{8}").Cast<Match>()
.Select(m => Convert.ToByte(m.Groups[0].Value, 2))
.ToArray();
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;
}
Это должно привести вас к ответу: Как преобразовать биты в байты?
Вы можете просто преобразовать вашу строку в массив, как в этой статье, и использовать ту же логику для выполнения преобразования.