我有一个30字节数组的字节,但是当我使用BitConverter.ToString时,它会显示十六进制字符串。字节是
0x42007200650061006B0069006E00670041007700650073006F006D0065
。
这也是Unicode。
这意味着B.r.e.a.k.i.n.g.A.w.e.s.o.m.e,但我不知道如何让它从十六进制转换为Unicode转换为ASCII。
答案 0 :(得分:17)
您可以使用其中一个Encoding
类 - 您需要知道这些字节的编码方式。
string val = Encoding.UTF8.GetString(myByteArray);
您显示的值看起来像Unicode编码,因此UTF8
或Unicode
看起来像是好赌注。
答案 1 :(得分:4)
它看起来像是小端UTF-16,所以你想要Encoding.Unicode
:
string text = Encoding.Unicode.GetString(bytes);
您通常不应该假设编码是什么 - 它应该是您对数据的了解。对于其他编码,您显然使用不同的Encoding
实例,但Encoding
是用于文本二进制表示的正确类。
编辑:如评论中所述,您似乎从字节数组的 start (在这种情况下需要Encoding.BigEndianUnicode
)或<来自< em>结束(在这种情况下只有Encoding.Unicode
就可以了。)
(当涉及到另一种方式时,采用任意二进制数据并将其表示为文本,你应该使用hex或base64。这不是这种情况,但你应该知道它。)