如何将一串字符转换为二进制字符串,然后再返回?

问题描述:

我需要将一个字符串转换为它的二进制equivilent并保存在一个字符串中。然后将其返回到它的ASCII等价物中。如何将一串字符转换为二进制字符串,然后再返回?

+1

你有什么考虑串的二进制等同? – Amadan

+0

字符串不是用来存储二进制数据的;你的意思是你想要将字符串编码为一系列字节(或一个流)吗? – Cameron

+0

例如,如果我有字符串值=“你好”;我需要字符串Binvalue =“0100100001100101011011000110110001101111”; –

可以通过使用一个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

+0

+1出于奶酪错误。这在我的书中肯定是一个严重的问题。 ;-) –

+0

@Judah:谢谢:D我从Terry Pratchett的书中借来的。见[this](http://en.wikipedia.org/wiki/Hex_(Discworld))。 – Cameron

+0

最终结果试图做的是将文件转换为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(); 
} 

希望帮助您。