标准二进制格式的特殊字符

时间:2014-02-13 16:33:44

标签: c#

我准备了一个将输入字符串转换为二进制格式'0'和'1'的方法:

public static string StringToBinary(string data)
{
    StringBuilder sb = new StringBuilder();
    char[] chararr = data.ToCharArray();
    foreach (char c in data.ToCharArray())
    {
        string appendedStr = Convert.ToString(c, 2).PadLeft(8, '0');
        sb.Append(appendedStr);
    }
    return sb.ToString();
}

将每个字符作为8位的组件处理

然后我写了一个方法,将二进制文件中的字符串恢复为

public static string BinaryToString(string data)
{
    List<Byte> byteList = new List<Byte>();

    for (int i = 0; i < data.Length; i += 8)
    {
        byteList.Add(Convert.ToByte(data.Substring(i, 8), 2));
    }

    return Encoding.ASCII.GetString(byteList.ToArray());
}

也将每8位处理为一个字符,并且工作正常。 但是我使用像(ψ,≤,我认为所有特殊字符)之类的字符,它不起作用并从BinaryToString方法返回Exception,因为它从StringToBinary转换为14位(对于≤),而我尝试通过向左添加0来完成它到16位,它返回另一个字符串序列 任何人都有解决方案??

1 个答案:

答案 0 :(得分:1)

您假设您可以安全地浏览char数组并从每个字符中获取单个字节。这是一个错误的假设。

相反,您需要在给定的编码中首先将字符串编码为字节数组。例如:

Encoding.Unicode.GetBytes(data);

然后,您可以安全地将每个字节转换为二进制文件。

另一方面,对于您读取的每8位,您将它们作为单个字节重新组合在一起,当您再次获得整个字节数组时,只需调用

Encoding.Unicode.GetString(byteData);

你已经完成了。

但是......为什么要将字符保存为二进制字符串?你真正试图解决的是什么问题?如果您正在尝试压缩等任何东西,那么您使用的效率非常低......如果您需要使用它来序列化数据,为什么不使用十六进制或Base-64编码?