如何安全地将字节数组转换为字符串并返回?

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

总结一下: 如何将字节数组转换为字符串,然后将该字符串转换回原来的字节数组?

73655 次浏览

The absolute safest way to convert bytes to a string and back is to use base64:

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

That way you're guaranteed not to get "invalid" unicode sequences such as the first half of a surrogate pair without the second half. Nothing's going to decide to normalize the data into something strange (it's all ASCII). There's no chance of using code points which aren't registered in Unicode, or anything like that. Oh, and you can cut and paste without much fear, too.

Yes, you end up with 4 characters for every 3 bytes - but that's a small price to pay for the knowledge that your data won't be corrupted.

You can use Convert.ToBase64 documentation http://msdn.microsoft.com/en-us/library/dhx0d524.aspx

You can just use the Convert class as below.

/// <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);
}