如何将字节数组转换为字符串? [复制]
Posted
技术标签:
【中文标题】如何将字节数组转换为字符串? [复制]【英文标题】:How do I convert a byte array to a string? [duplicate] 【发布时间】:2012-04-07 09:17:53 【问题描述】:我有一个 30 字节数组的字节,但是当我使用 BitConverter.ToString 时,它会显示十六进制字符串。字节是
0x42007200650061006B0069006E00670041007700650073006F006D0065
。
这也是Unicode。
这意味着 B.r.e.a.k.i.n.g.A.w.e.s.o.m.e,但我不知道如何让它从十六进制转换为 Unicode 到 ASCII。
【问题讨论】:
【参考方案1】:看起来这是小端 UTF-16,所以你想要Encoding.Unicode
:
string text = Encoding.Unicode.GetString(bytes);
您通常不应该假设编码是什么 - 它应该是您对数据的了解。对于其他编码,您显然会使用不同的 Encoding
实例,但 Encoding
是文本二进制表示的正确类。
编辑:如 cmets 中所述,您的字节数组的 start (在这种情况下您需要 Encoding.BigEndianUnicode
)或 中似乎缺少“00”结束(在这种情况下只需Encoding.Unicode
就可以了)。
(然而,反过来说,获取任意二进制数据并将其表示为文本时,您应该使用 hex 或 base64。这里不是这种情况,但您应该注意这一点。)
【讨论】:
【参考方案2】:您可以使用Encoding
类之一 - 不过您需要知道这些字节的编码方式。
string val = Encoding.UTF8.GetString(myByteArray);
您显示的值看起来像 Unicode 编码,所以 UTF8
或 Unicode
看起来不错。
【讨论】:
非常感谢!哈哈,成功了。 @IanLundberg:请注意,如果您使用Encoding.UTF8
,您将得到一个字符串,该字符串的长度是您输入数据的两倍。在某些输出形式中,您可能不会看到,但其他每个字符都是 U+0000。
哦好吧我没意识到以上是关于如何将字节数组转换为字符串? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
在 Java 中,如何将字节数组转换为十六进制数字字符串,同时保持前导零? [复制]