关于C#:如何将字节数组转换为字符串?

How do I convert a byte array to a string?

本问题已经有最佳答案,请猛点这里访问。

我有一个30字节数组的字节,但是当我使用bitconverter.toString时,它显示十六进制字符串。字节是0x42007200650061006B0069006E00670041007700650073006F006D0065。它也是Unicode格式的。

它的意思是b.r.e.a.k.i.n.g.a.w.e.s.o.m.e,但我不知道如何让它从十六进制转换为Unicode转换为ASCII。


您可以使用其中一个Encoding类——但是您需要知道这些字节是用什么编码的。

1
string val = Encoding.UTF8.GetString(myByteArray);

您显示的值看起来像Unicode编码,因此UTF8Unicode看起来像是好的匹配。


它看起来像是小endian utf-16,所以您需要Encoding.Unicode

1
string text = Encoding.Unicode.GetString(bytes);

通常情况下,您不应该假定编码是什么——它应该是您知道的关于数据的东西。对于其他编码,您显然会使用不同的Encoding实例,但Encoding是文本二进制表示的正确类。

编辑:正如注释中所指出的,从字节数组的开头(在这种情况下,您需要Encoding.BigEndianUnicode)或从末尾(在这种情况下,只有Encoding.Unicode)可能会丢失一个"00"。

(然而,当涉及到相反的情况时,采用任意二进制数据并将其表示为文本,您应该使用十六进制或base64。这里不是这样,但你应该知道。)