如何将一串字符转换为二进制字符串并再次返回?

时间:2011-11-29 02:13:29

标签: c# encoding

我需要将一个字符串转换为它的二进制等效值,并将其保存在字符串中。然后将其恢复为ASCII等效值。

3 个答案:

答案 0 :(得分:12)

您可以使用Encoding将字符串编码为按字节顺序表示,例如UTF-8:

var str = "Out of cheese error";
var bytes = Encoding.UTF8.GetBytes(str);

获取.NET字符串对象:

var strAgain = Encoding.UTF8.GetString(bytes);
// str == strAgain

您似乎希望将表示形式视为一系列'1''0'个字符;我不确定你为什么这样做,但这也是可能的:

var binStr = string.Join("", bytes.Select(b => Convert.ToString(b, 2)));

编码采用抽象字符串(在某种意义上它们是一系列Unicode代码点的不透明表示),并将它们映射到一系列具体的字节。没有编码,字节是没有意义的(再次,因为它们是不透明的)。但是,通过编码,它们可以变回字符串。

你似乎把“ASCII”和字符串混在一起; ASCII只是一个编码,只处理最多128个代码点。例如,如果你有一个包含'é'的字符串,它没有ASCII表示,所以绝对不能使用一系列ASCII字节表示,即使它可以在.NET string对象中安静地存在。

有关详细信息,请参阅this article by Joel Spolsky

答案 1 :(得分:1)

您可以使用这些功能转换为二进制文件并将其还原:

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());
}

并将字符串转换为二进制文件:

public static string StringToBinary(string data)
{
    StringBuilder sb = new StringBuilder();

    foreach (char c in data.ToCharArray())
    {
        sb.Append(Convert.ToString(c, 2).PadLeft(8, '0'));
    }
    return sb.ToString();
}

希望帮助你。

答案 2 :(得分:0)

首先将字符串转换为字节,如我的评论和Cameron的答案所述;然后迭代,将每个字节转换为8位二进制数(可能使用Convert.ToString,适当填充),然后连接。对于反方向,拆分为8个字符,运行Convert.ToInt16,构建一个字节数组,然后转换回GetString的字符串。

相关问题