如何将一串字符转换为二进制字符串,然后再返回?
可以通过使用一个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对象中。
进一步的阅读可见this article by Joel Spolsky。
+1出于奶酪错误。这在我的书中肯定是一个严重的问题。 ;-) –
@Judah:谢谢:D我从Terry Pratchett的书中借来的。见[this](http://en.wikipedia.org/wiki/Hex_(Discworld))。 – Cameron
最终结果试图做的是将文件转换为3D模型并将其上传到MYSQL数据库。然而,该文件有大量的单引号和双引号混淆了查询,所以我的想法是将其转换为字节数组并将其上传。我得到的代码工作的字节数组,但它非常缓慢。有没有另一种上传到数据库的文件是'and'? –
首先转换成字符串转换成字节,在我的评论和卡梅隆的回答说明;然后迭代,将每个字节转换为8位二进制数(可能与Convert.ToString
,适当填充),然后连接。对于相反的方向,分割8个字符,运行Convert.ToInt16
,建立一个字节数组,然后转换回字符串GetString
。
您可以使用这些功能转换成二进制和其恢复:
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();
}
希望帮助您。
你有什么考虑串的二进制等同? – Amadan
字符串不是用来存储二进制数据的;你的意思是你想要将字符串编码为一系列字节(或一个流)吗? – Cameron
例如,如果我有字符串值=“你好”;我需要字符串Binvalue =“0100100001100101011011000110110001101111”; –