2012-07-01 56 views
2

我剛開始爲wp7開發應用程序,我試圖用c#將二進制字符串轉換回ascii。將stringbinary轉換爲ascii

但我不知道該怎麼辦。 希望有人能幫助我。

例如:

輸入字符串:0110100001100101011011000110110001101111

輸出字符串:採用串並內置Convert.ToByte hello

+1

可能的複製:http://stackoverflow.com/questions/6006425/binary-to-corresponding-ascii-string-conversion – Gloopy

回答

3

簡單的解決方案,

看起來是這樣的:

string input = "0110100001100101011011000110110001101111"; 
int charCount = input.Length/8; 
var bytes = from idx in Enumerable.Range(0, charCount) 
      let str = input.Substring(idx*8,8) 
      select Convert.ToByte(str,2); 
string result = Encoding.ASCII.GetString(bytes.ToArray()); 
Console.WriteLine(result); 

另一種解決方案,做一些計算自己:

我說這個情況下,你想知道計算應如何進行,而不是其方法的框架會爲你:

string input = "0110100001100101011011000110110001101111"; 
var chars = input.Select((ch,idx) => new { ch, idx}); 
var parts = from x in chars 
      group x by x.idx/8 into g 
      select g.Select(x => x.ch).ToArray(); 

var bytes = parts.Select(BitCharsToByte).ToArray(); 
Console.WriteLine(Encoding.ASCII.GetString(bytes)); 

其中BitCharsToByte確實從到相應的字節一個char []轉換:

byte BitCharsToByte(char[] bits) 
{ 
    int result = 0; 
    int m = 1; 
    for(int i = bits.Length - 1 ; i >= 0 ; i--) 
    { 
     result += m * (bits[i] - '0'); 
     m*=2; 
    } 
    return (byte)result; 
} 

上述兩種解決方案基本上做同樣的事情:第一組中的8個組中的字符;然後取出該子字符串,獲取表示的位並計算字節值。然後使用ASCII編碼將這些字節轉換爲字符串。

+0

嗨driis, 感謝您的回覆,我已經嘗試了上面提到的方法。 但是,Encoding.ASCII在wp7中不受支持,這也是使我陷入很長時間的原因。 – JustStarted

0

您可以使用BitArray類,並使用其CopyTo功能烏爾位字符串複製到字節數組

然後你就可以在你的字節數組轉換爲使用Text.Encoding.UTF8.GetString(Byte[])

串看到這個link on BitArray on MSDN

+1

直接執行此操作會翻轉生成的'byte []'中的位的順序,因此代碼將不得不考慮這一點。 – driis

+0

嗨Uday0119, 感謝您的回覆。 是的!看來你將不得不在wp7中使用'Text.Encoding.UTF8.GetString(Byte [])'而不是'Text.Encoding.ASCII.GetString(Byte [])''。 – JustStarted

+0

哦,並且對於那些收到此錯誤消息「System.Text.encoding.GetString(byte [])由於保護級別而無法訪問的人」,您可能需要查看此[鏈接](http:// forums .silverlight.net/t/159871.aspx/1) – JustStarted