将0和1的字符串转换为字节数组

时间:2012-12-30 11:28:20

标签: c# textbox byte bit

我想在文本框中编写以下位序列,如下所示:

  

000101100000000100000001000000010000000000100111001100010010000000110000001011100011000000110000001100000011000000100000001100110011100100101110001101110011010100100000001100000010111000110000001110000010000000110000001011100011000000110000001000000011000000101110001100000011000000110000001100000000010111010111

但每8位对应一个字节,所以我想将它们存储在byte[]数组中。当然,如果我这样读它们:

byte[] byteBuffer = Encoding.ASCII.GetBytes(messageTextBox.Text);

每个01变成一个完整的字节,这不是我想要的。

是否有任何直接的解决方案,如某些现有方法,或者我必须开发自己的方法?

2 个答案:

答案 0 :(得分:1)

您可以使用Convert.ToByte()并执行以下操作:

string str = messageTextBox.Text;
byte[] byteBuffer = Enumerable.Range(0, str / 8).
                        Select(pos => Convert.ToByte(
                        str.Substring(pos * 8, 8),
                        2)).ToArray();

答案 1 :(得分:1)

我已经在没有任何编译器的情况下编写了以下代码,所以请道歉语法错误 - 您还必须自己处理文本字符串的末尾,它不包括在内。我认为以下方法可以做你想做的事情。

private bytes[] extractBytes (string text) {

    byte[] bytes = new byte[100];
    int i = 0;
    int j = 0;
    string currentByte = "";

    while (i <= text.Length) {

         currentByte += text.Substring(i, 1);

         i++;

         if (i % 8 == 0) {

             j++;

             bytes[j] = convertToDecimal(currentByte);
             currentByte = "";
         }
    )

    return bytes;
}

如果要保存从字符串中提取的二进制值表示的十进制值,可以使用此转换方法:

private byte convertToDecimal (string binary) {

    int i = 0;
    int byte = 0;

    while (i < s.Length) {

        if (s.Substring(s.Length - 1 - i, 1).Equals("1")) {

            sum += (byte)Math.Pow(2, i);
        }

        i++;
    }

    return sum;
}