【问题标题】:Converting a byte array to string and vice versa in C#在 C# 中将字节数组转换为字符串,反之亦然
【发布时间】:2018-06-18 21:09:10
【问题描述】:

我想将一个字节数组转换为字符串,然后将其转换回字节数组。我的代码是:

byte[] data = { 250, 15, 1, 220, 127 };
var s = Encoding.Unicode.GetString(data);
var b = Encoding.Unicode.GetBytes(s);

但是,运行代码后 data 和 b 不相等,我也尝试了 UTF7、UTF8、UTF32 和 ASCII 编码。他们都没有正常工作。唯一有效的选项是默认编码。据我所知,它可以从一个系统到另一个系统有所不同,那么我该如何明确定义我的问题的编码?

【问题讨论】:

  • 定义worked properly。只要您使用正确编码,转换就没有问题。这些字节应该包含什么?它绝对不是 ASCII,而且很可能不是任何 Unicode 代码页
  • 给定的一组字节不一定总是转换成一个字符串,至少不是一个会回到同一组字节的字符串。这感觉就像XY Problem
  • 恭喜,您已经注意到扩展 ASCII 字符在每个系统上的含义并不相同。解决这个问题的方法是不使用字符串来存储数字数据,如果你的数据确实是字符串,则使用可移植的 Unicode 编码,而不是扩展 ASCII。
  • @HamidReza 您是否尝试序列化二进制数据?在这种情况下,您应该使用像 Convert.ToBase64String 这样的二进制编码
  • @HamidReza 在做什么什么I need to convert my byte array into string and back it again 不是问题。有成千上万种方法可以做到这一点。但是,如果您想将二进制数据发送到 Web 服务或将数据附加到电子邮件中,有一些标准化的方法可以做到这一点,例如 Base64、Mime 编码等。

标签: c#


【解决方案1】:

使用文本编码将任意、完全随机的字节数组转换为字符串并不是一个好主意,因为这仅在字节实际表示有效文本时才有效,正如您的示例所示,这显然不正确。

改用 Base64Encoding!

Convert.ToBase64String(见https://msdn.microsoft.com/de-de/library/8f9a8s97(v=vs.110).aspx) Convert.FromBase64String(见https://msdn.microsoft.com/en-us/library/system.convert.frombase64string(v=vs.110).aspx

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-16
    • 2010-12-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多