如何将字节数组转换为字符串? [复制]

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 编码,所以 UTF8Unicode 看起来不错。

【讨论】:

非常感谢!哈哈,成功了。 @IanLundberg:请注意,如果您使用Encoding.UTF8,您将得到一个字符串,该字符串的长度是您输入数据的两倍。在某些输出形式中,您可能不会看到,但其他每个字符都是 U+0000。 哦好吧我没意识到

以上是关于如何将字节数组转换为字符串? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何将字符串转换为十六进制字节数组? [复制]

如何将普通字符串转换为等效的十六进制字节数组? [复制]

在 Java 中,如何将字节数组转换为十六进制数字字符串,同时保持前导零? [复制]

在 Java 中,如何将字节数组转换为十六进制数字字符串,同时保持前导零? [复制]

字节数组字符串到字节数组? [复制]

在C++中,如何把字节数组转换成字符串