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

Ian*_*erg 10 c# unicode byte ascii winforms

我有一个30字节的数组的字节,但当我使用BitConverter.ToString它显示十六进制字符串.字节是 0x42007200650061006B0069006E00670041007700650073006F006D0065.这也是Unicode.

这意味着BreakingAwesome,但我不知道如何让它从十六进制转换为Unicode转换为ASCII.

Ode*_*ded 18

您可以使用其中一个Encoding类 - 您需要知道这些字节的编码方式.

string val = Encoding.UTF8.GetString(myByteArray);
Run Code Online (Sandbox Code Playgroud)

您显示的值看起来像Unicode编码,所以UTF8Unicode看起来像是好的赌注.

  • @IanLundberg:请注意,如果您使用`Encoding.UTF8`,您将得到一个字符串,它的长度应该是输入数据的两倍.在某些输出表单中,您可能不会*看到*,但每个其他字符将是U + 0000. (3认同)

Jon*_*eet 5

看起来那是小端 UTF-16,所以你想要Encoding.Unicode

string text = Encoding.Unicode.GetString(bytes);
Run Code Online (Sandbox Code Playgroud)

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

编辑:如评论中所述,您似乎从字节数组的开头(在这种情况下需要Encoding.BigEndianUnicode)或结尾(在这种情况下Encoding.Unicode很好)缺少“00” 。

(然而,反过来说,取任意二进制数据并将其表示为文本,您应该使用十六进制或 base64。这里不是这种情况,但您应该意识到这一点。)