将二进制字符串转换回普通字符串

时间:2016-04-27 11:07:41

标签: c# .net

string GetBits(string input)
{
    StringBuilder sb = new StringBuilder();            
    foreach (byte b in Encoding.Unicode.GetBytes(input))
    {
        sb.Append(Convert.ToString(b, 2));
    }
    return sb.ToString();
}

我发现这个函数在线将字符串转换为二进制。我该怎么做呢?

例如,使用上面给出的函数将单词“hello”转换为二进制,然后将生成的二进制字符串转换回原始单词/字符串?

我正在尝试在C#中执行此操作,并且我想要转换回来的输入是上面函数给出的字符串

1 个答案:

答案 0 :(得分:1)

主要问题是输入功能错误 如果传递字符串“Hello”,则返回的字符串为

 "10010001100101110110011011001101111" (35 characters ??? )

但这不是单词Hello的二进制中的正确表示,其中每个字符应由一系列8 0 | 1(总共40个字符)表示

此错误的主要原因在于Convert.ToString将传递给转换的字节中的前导零除去。
所以字母H应为01001000(8个字符),但转换返回1001000(7个字符),因此后面的所有内容都是错误的,无法正确转换回来。

您可以使用

修复输入功能
string GetBits(string input)
{
    StringBuilder sb = new StringBuilder();

    foreach (byte b in Encoding.UTF8.GetBytes(input))
    {
        string temp = Convert.ToString(b, 2);

        // This ensure that 8 chars represent the 8bits
        temp = "00000000".Substring(temp.Length) + temp; 
        sb.Append(temp);
    }
    return sb.ToString();
}

转换回“Hello”时可以写为

string GetString(string input)
{
    // Probably a checking on the input length as multiple of 8 
    // should be added here....

    StringBuilder sb = new StringBuilder();
    while (input.Length > 0)
    {
        string block = input.Substring(0, 8);
        input = input.Substring(8);
        int value = 0;
        foreach (int x in block)
        {
            int temp = x - 48;
            value = (value << 1) | temp;
        }
        sb.Append(Convert.ToChar(value));
    }
    return sb.ToString();
}