我剛開始爲wp7開發應用程序,我試圖用c#將二進制字符串轉換回ascii。將stringbinary轉換爲ascii
但我不知道該怎麼辦。 希望有人能幫助我。
例如:
輸入字符串:0110100001100101011011000110110001101111
輸出字符串:採用串並內置Convert.ToByte hello
我剛開始爲wp7開發應用程序,我試圖用c#將二進制字符串轉換回ascii。將stringbinary轉換爲ascii
但我不知道該怎麼辦。 希望有人能幫助我。
例如:
輸入字符串:0110100001100101011011000110110001101111
輸出字符串:採用串並內置Convert.ToByte hello
看起來是這樣的:
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編碼將這些字節轉換爲字符串。
嗨driis, 感謝您的回覆,我已經嘗試了上面提到的方法。 但是,Encoding.ASCII在wp7中不受支持,這也是使我陷入很長時間的原因。 – JustStarted
您可以使用BitArray
類,並使用其CopyTo
功能烏爾位字符串複製到字節數組
然後你就可以在你的字節數組轉換爲使用Text.Encoding.UTF8.GetString(Byte[])
直接執行此操作會翻轉生成的'byte []'中的位的順序,因此代碼將不得不考慮這一點。 – driis
嗨Uday0119, 感謝您的回覆。 是的!看來你將不得不在wp7中使用'Text.Encoding.UTF8.GetString(Byte [])'而不是'Text.Encoding.ASCII.GetString(Byte [])''。 – JustStarted
哦,並且對於那些收到此錯誤消息「System.Text.encoding.GetString(byte [])由於保護級別而無法訪問的人」,您可能需要查看此[鏈接](http:// forums .silverlight.net/t/159871.aspx/1) – JustStarted
可能的複製:http://stackoverflow.com/questions/6006425/binary-to-corresponding-ascii-string-conversion – Gloopy