我需要将一个字符串转换为它的二进制等效值,并将其保存在字符串中。然后将其恢复为ASCII等效值。
答案 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
的字符串。