2012-12-30 79 views
1

我想要寫的位的下列序列中的文本框,這樣的:轉換0和1的一個字符串轉換爲字節數組

000101100000000100000001000000010000000000100111001100010010000000110000001011100011000000110000001100000011000000100000001100110011100100101110001101110011010100100000001100000010111000110000001110000010000000110000001011100011000000110000001000000011000000101110001100000011000000110000001100000000010111010111

但每每個8位對應於一個字節,所以想將它們存儲在byte[]陣列中。當然,如果我讀他們是這樣的:

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

每個01變成整個字節,這不是我想要的。

是否有任何直接的解決方案,像一些現有的方法,或者我必須開發自己的?

+0

你在用什麼語言?看起來像C#給我,但你可能想添加適當的標籤到你的文章,只是爲了說清楚。 –

+0

對不起,我忘了。這是C# – Ger

回答

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; 
} 
+0

我發現了下一個錯誤: '值是太大或太小,從string' 一個無符號字節在生產線:'字節[J] = Byte.Parse(currentByte);' 試圖解析'00110001'。我認爲這是由於系統不明白字符串表示二進制值,但我不知道如何正確地得到它 – Ger

+0

好的我看到了..你想從長字符串中提取什麼?諸如「11001001」之類的字符串或其數字表示34? –

+0

@Ger我添加了一種方法,可以將表示二進制數字的字符串轉換爲十進制字節。看到我上面修改和更新的帖子。 –

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(); 
相關問題