【问题标题】: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。

【问题讨论】:

    标签: c# winforms unicode byte 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。
      • 哦好吧我没意识到
      猜你喜欢
      • 2015-08-17
      • 2012-07-24
      • 2010-09-24
      • 2011-02-27
      • 2013-07-08
      • 2015-10-23
      • 2021-11-17
      相关资源
      最近更新 更多