C#将带空的字节数组转换为字符串
全部, 我有一个关于将带null的字节数组转换为C#字符串的问题。 下面是我想转换为字符串的字节数组示例。 我希望得到一个值为SHKV的字符串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()); 然而,我
[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));