C#将带有空值的字节数组转换为字符串

时间:2010-07-22 14:01:24

标签: c# string encode

全部,

我有一个关于将带有空值的字节数组转换为C#字符串的问题。 这是我想要转换为字符串的字节数组的示例。 我希望得到一个值为SHKV

的字符串
[0]: 83
[1]: 0
[2]: 72
[3]: 0
[4]: 75
[5]: 0
[6]: 86
[7]: 0

我怎样才能在C#中做到?

谢谢, MK

7 个答案:

答案 0 :(得分: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

答案 1 :(得分:3)

看起来像小端UTF-16,所以:

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

答案 2 :(得分:1)

您是否保证始终会看到字符串的这种编码(char,null,char,null等)?如果是这样,您只需使用Unicode字符串编码器对其进行解码:

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

答案 3 :(得分:0)

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

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

但是,我怀疑你是在试图破解Unicode数据。

<强>不

相反,请使用Encoding class

答案 4 :(得分:0)

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

您还可以使用UnicodeEncodingUTF32EncodingUTF7EncodingUTF8Encoding

答案 5 :(得分:0)

使用Linq语法:

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

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

虽然您最好选择正确的编码,但正如其他人所建议的那样。

答案 6 :(得分:0)

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

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