在C#中将string转换为字节数组

我对C#很陌生。 我正在从VB转换成C#。 这个语句的语法有问题:

if ((searchResult.Properties["user"].Count > 0)) { profile.User = System.Text.Encoding.UTF8.GetString(searchResult.Properties["user"][0]); } 

然后我看到以下错误:

参数1:不能从“对象”转换为“byte []”

“System.Text.Encoding.GetString(byte [])”的最佳重载方法匹配有一些无效参数

我试图修复基于这个职位的代码,但仍然没有成功

 string User = Encoding.UTF8.GetString("user", 0); 

有什么build议么?

如果你已经有了一个字节数组,那么你将需要知道使用什么types的编码将其编入该字节数组中。

例如,如果字节数组是这样创build的:

 byte[] toBytes = Encoding.ASCII.GetBytes(somestring); 

你将需要把它变成一个像这样的string:

 string something = Encoding.ASCII.GetString(toBytes); 

如果您可以在您inheritance的代码中find用于创build字节数组的编码,那么您应该设置它。

首先,添加System.Text命名空间

 using System.Text; 

然后使用这个代码

 string input = "some text"; byte[] array = Encoding.ASCII.GetBytes(input); 

希望解决它!

 static byte[] GetBytes(string str) { byte[] bytes = new byte[str.Length * sizeof(char)]; System.Buffer.BlockCopy(str.ToCharArray(), 0, bytes, 0, bytes.Length); return bytes; } static string GetString(byte[] bytes) { char[] chars = new char[bytes.Length / sizeof(char)]; System.Buffer.BlockCopy(bytes, 0, chars, 0, bytes.Length); return new string(chars); } 

您也可以使用扩展方法向stringtypes添加方法,如下所示:

 static class Helper { public static byte[] ToByteArray(this string str) { return System.Text.Encoding.ASCII.GetBytes(str); } } 

并像下面一样使用它:

 string foo = "bla bla"; byte[] result = foo.ToByteArray(); 

用这个

 byte[] myByte= System.Text.ASCIIEncoding.Default.GetBytes(myString); 

只有字符是1个字节,以下方法才能工作。 (由于它是2个字节,默认的unicode将不起作用)

  public static byte[] ToByteArray(string value) { char[] charArr = value.ToCharArray(); byte[] bytes = new byte[charArr.Length]; for (int i = 0; i < charArr.Length; i++) { byte current = Convert.ToByte(charArr[i]); bytes[i] = current; } return bytes; } 

保持简单

对JustinStolle的编辑进行改进(Eran Yogev使用BlockCopy)。

提出的解决scheme确实比使用编码更快。 问题是,它不适用于编码长度不均匀的字节数组。 正如所给出的那样,这引起了一个不受约束的例外。 从string解码时,将长度增加1会留下尾随字节。

对我来说,当我想从DataTableJSON进行编码时,需求就来了。 我正在寻找一种将二进制字段编码为string并从string解码回byte[]

因此,我创build了两个类 – 一个包装上述解决scheme(当从string编码很好,因为长度总是偶数),另一个处理byte[]编码。

我通过添加单个字符来解决不均匀长度问题,该字符告诉我如果二进制数组的原始长度是奇数('1')还是偶数('0')

如下:

 public static class StringEncoder { static byte[] EncodeToBytes(string str) { byte[] bytes = new byte[str.Length * sizeof(char)]; System.Buffer.BlockCopy(str.ToCharArray(), 0, bytes, 0, bytes.Length); return bytes; } static string DecodeToString(byte[] bytes) { char[] chars = new char[bytes.Length / sizeof(char)]; System.Buffer.BlockCopy(bytes, 0, chars, 0, bytes.Length); return new string(chars); } } public static class BytesEncoder { public static string EncodeToString(byte[] bytes) { bool even = (bytes.Length % 2 == 0); char[] chars = new char[1 + bytes.Length / sizeof(char) + (even ? 0 : 1)]; chars[0] = (even ? '0' : '1'); System.Buffer.BlockCopy(bytes, 0, chars, 2, bytes.Length); return new string(chars); } public static byte[] DecodeToBytes(string str) { bool even = str[0] == '0'; byte[] bytes = new byte[(str.Length - 1) * sizeof(char) + (even ? 0 : -1)]; char[] chars = str.ToCharArray(); System.Buffer.BlockCopy(chars, 2, bytes, 0, bytes.Length); return bytes; } } 

有没有人看到有什么理由不这样做?

 mystring.Select(Convert.ToByte).ToArray() 
 var result = System.Text.Encoding.Unicode.GetBytes(text);