我有一个由30个字节组成的字节数组,但是当我使用BitConverter.ToString方法时,它会显示十六进制字符串。这个字节为0x42007200650061006B0069006E00670041007700650073006F006D0065
。它也是Unicode编码。
意思是B.r.e.a.k.i.n.g.A.w.e.s.o.m.e,但我不确定如何将其从十六进制转换为Unicode再到ASCII。
Encoding
类 - 但需要知道这些字节所采用的编码方式。string val = Encoding.UTF8.GetString(myByteArray);
你展示出来的值看起来像是Unicode编码,因此 UTF8
或者 Unicode
看起来是不错的选择。
Encoding.Unicode
:string text = Encoding.Unicode.GetString(bytes);
通常情况下,您不应该假设编码方式,而是应该了解数据的编码方式。对于其他编码方式,您显然会使用不同的Encoding
实例,但是Encoding
是二进制文本表示的正确类。
编辑:如评论中所述,您似乎缺少一个“00”,可以从字节数组的开头(在这种情况下,您需要Encoding.BigEndianUnicode
)或结尾(在这种情况下,只需使用Encoding.Unicode
即可)添加。
(然而,当涉及将任意二进制数据表示为文本时,您应该使用十六进制或base64。这里不是这种情况,但您应该意识到它。)
Encoding.UTF8
,则会得到一个字符串,其长度为输入数据的两倍。在某些输出格式中,您可能看不到,但每个其他字符都将是 U+0000。 - Jon Skeet