【问题标题】:How can I safely convert a byte array into a string and back? [duplicate]如何安全地将字节数组转换为字符串并返回? [复制]
【发布时间】:2010-11-11 04:53:50
【问题描述】:

我并不真正关心编码和其他东西,只要我得到完全相同的字节数组。

总结一下:如何将字节数组转换为字符串,然后将该字符串转换回我开始使用的相同字节数组?

【问题讨论】:

  • @Mehrdad 等人,这与“.NET 字符串到字节数组 C#”的问题不同。这里的问题是 - 我如何安全地从字节数组转换为字符串并返回。我使用“神奇”的 Latin1 编码 (Encoding.GetEncoding(28591)),它似乎很好地尊重 byte => string => byte。

标签: c# string bytearray


【解决方案1】:

将字节转换为字符串并返回的绝对最安全的方法是使用 base64:

string base64 = Convert.ToBase64String(bytes);
byte[] bytes = Convert.FromBase64String(base64);

这样可以保证您不会得到“无效”的 unicode 序列,例如没有后半部分的代理对的前半部分。没有什么会决定将数据标准化为奇怪的东西(都是 ASCII)。没有机会使用未在 Unicode 中注册的代码点或类似的东西。哦,你也可以毫无顾忌地剪切和粘贴。

是的,您最终每 3 个字节有 4 个字符 - 但要知道您的数据不会被损坏,这是一个很小的代价。

【讨论】:

  • 这篇文章应该取代上面的答案。 :)
  • 完成。一开始没看到注释。很重要!谢谢,再次乔恩·斯基特 =)
  • 斯基特先生又一次回答了我的问题,而且在我问之前他又一次回答了。 :)
  • 这是一个非常重要的帖子。我在转换方面遇到了很大的问题,但解决了所有与字符串/字节数组相关的问题。
  • @RuneS:我建议你提出一个新问题,用一个简短但完整的程序来演示问题。
【解决方案2】:

您可以使用Convert 类,如下所示。

/// <summary>
/// Converts a string to byte array
/// </summary>
/// <param name="input">The string</param>
/// <returns>The byte array</returns>
public static byte[] ConvertToByteArray(string input)
{
    return input.Select(Convert.ToByte).ToArray();
}

/// <summary>
/// Converts a byte array to a string
/// </summary>
/// <param name="bytes">the byte array</param>
/// <returns>The string</returns>
public static string ConvertToString(byte[] bytes)
{
    return new string(bytes.Select(Convert.ToChar).ToArray());
}

/// <summary>
/// Converts a byte array to a string
/// </summary>
/// <param name="bytes">the byte array</param>
/// <returns>The string</returns>
public static string ConvertToBase64String(byte[] bytes)
{
    return Convert.ToBase64String(bytes);
}

【讨论】:

    【解决方案3】:

    您可以使用 Convert.ToBase64 文档http://msdn.microsoft.com/en-us/library/dhx0d524.aspx

    【讨论】:

      猜你喜欢
      • 2014-02-21
      • 1970-01-01
      • 1970-01-01
      • 2012-02-24
      • 2012-04-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多