如何将字节数组转换为字符串?

10

我有一个由30个字节组成的字节数组,但是当我使用BitConverter.ToString方法时,它会显示十六进制字符串。这个字节为0x42007200650061006B0069006E00670041007700650073006F006D0065。它也是Unicode编码。

意思是B.r.e.a.k.i.n.g.A.w.e.s.o.m.e,但我不确定如何将其从十六进制转换为Unicode再到ASCII。

2个回答

20
您可以使用其中一个Encoding类 - 但需要知道这些字节所采用的编码方式。
string val = Encoding.UTF8.GetString(myByteArray);

你展示出来的值看起来像是Unicode编码,因此 UTF8 或者 Unicode 看起来是不错的选择。


3
注意,如果您使用 Encoding.UTF8,则会得到一个字符串,其长度为输入数据的两倍。在某些输出格式中,您可能看不到,但每个其他字符都将是 U+0000。 - Jon Skeet

5
看起来这是小端 UTF-16,所以您需要 Encoding.Unicode
string text = Encoding.Unicode.GetString(bytes);

通常情况下,您不应该假设编码方式,而是应该了解数据的编码方式。对于其他编码方式,您显然会使用不同的Encoding实例,但是Encoding是二进制文本表示的正确类。

编辑:如评论中所述,您似乎缺少一个“00”,可以从字节数组的开头(在这种情况下,您需要Encoding.BigEndianUnicode)或结尾(在这种情况下,只需使用Encoding.Unicode即可)添加。

(然而,当涉及将任意二进制数据表示为文本时,您应该使用十六进制或base64。这里不是这种情况,但您应该意识到它。)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接