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

C#将带空的字节数组转换为字符串,c#,string,encode,C#,String,Encode,全部, 我有一个关于将带null的字节数组转换为C#字符串的问题。 下面是我想转换为字符串的字节数组示例。 我希望得到一个值为SHKV的字符串 [0]: 83 [1]: 0 [2]: 72 [3]: 0 [4]: 75 [5]: 0 [6]: 86 [7]: 0 我怎么能用C#做呢 谢谢, MK假设ASCII字节,您可以使用LINQ: new string(bytes.Where(b => b != 0).Select(b => (char)b).ToArray()); 然而,我

全部,

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

[0]: 83
[1]: 0
[2]: 72
[3]: 0
[4]: 75
[5]: 0
[6]: 86
[7]: 0
我怎么能用C#做呢

谢谢,
MK

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

new string(bytes.Where(b => b != 0).Select(b => (char)b).ToArray());
然而,我怀疑您正在试图破解Unicode数据

不要

相反,使用


您还可以使用
unicodeincoding
utf32编码
utf7编码
utf8编码
,您确实需要知道原始编码才能成功转换

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

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

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

Console.WriteLine(yourString);    // SHKV
使用Linq语法:

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

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

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

这看起来像little endian UTF-16,因此:

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

您是否保证总是看到这种字符串编码(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));

字节[]b=新字节[]{83,0,72,0,75,0,86,0}

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

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