2

我刚刚开始为 wp7 开发应用程序,我正在尝试使用 c# 将二进制字符串转换回 ascii。

但我不知道该怎么做。希望有人可以在这里帮助我。

例子 :

输入字符串:0110100001100101011011000110110001101111

输出字符串:hello

4

2 回答 2

3

简单的解决方案,

使用 SubString 并内置 Convert.ToByte 可能如下所示:

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 编码将这些字节转换为字符串。

于 2012-07-01T08:56:43.577 回答
0

您可以使用BitArray该类并使用其CopyTo功能将您的位字符串复制到字节数组

然后您可以使用将字节数组转换为字符串Text.Encoding.UTF8.GetString(Byte[])

请参阅MSDN 上 BitArray 上的此链接

于 2012-07-01T09:03:11.713 回答