2010-07-22 247 views
2

全部,C#将字节数组与字符串转换为字符串

我有一个关于将字节数组与空值转换为C#字符串的问题。 这是我想转换为字符串的字节数组的示例。 我期望能获得与价值SHKV

[0]: 83 
[1]: 0 
[2]: 72 
[3]: 0 
[4]: 75 
[5]: 0 
[6]: 86 
[7]: 0 

我怎么能做到这一点在C#中的字符串?

感谢, MK

回答

6

你真的需要知道原始编码,以便将其成功转换。

我怀疑,在这种情况下,编码可能是UTF-16,您可以按如下转换:

byte[] yourByteArray = new byte[] { 83, 0, 72, 0, 75, 0, 86, 0 }; 

string yourString = Encoding.Unicode.GetString(yourByteArray)); 

Console.WriteLine(yourString); // SHKV 
0

假设ASCII字节,你可以使用LINQ:

new string(bytes.Where(b => b != 0).Select(b => (char)b).ToArray()); 

不过,我怀疑你想谬以千里Unicode数据。

不要。请使用Encoding class。你

0
string str = new ASCIIEncoding().GetString(bytes.Where(i => i != 0).ToArray()); 

也可以使用UnicodeEncodingUTF32EncodingUTF7EncodingUTF8Encoding

0

使用LINQ语法:

var chars = 
    from b in byteArray 
    where b != 0 
    select (char) b; 

string result = new String(chars.ToArray()); 

虽然你最好选择正确的编码相反,正如其他人所说的那样。

3

这看起来像小尾数UTF-16,所以:

string s = Encoding.Unicode.GetString(data); 
1

你保证总是看到字符串(字符,空,焦炭,空,等等)的这种编码?如果是这样,则可以简单地使用Unicode字符串编码器对其进行解码:

Byte[] contents = new Byte[] {83, 0, 72, 0, 75, 0, 86, 0}; 
    Console.WriteLine(System.Text.Encoding.Unicode.GetString(contents)); 
0

字节[] B =新的字节[] {83,0,72,0,75,0,86,0};

System.Text.Encoding.Unicode.GetString(b);