Как я могу безопасно преобразовать массив байт в строку и обратно? [дубликат]


этот вопрос уже есть ответ здесь:

Я действительно не забочусь о кодировании и прочее, пока я получаю обратно тот же самый массив байтов.

Итак, чтобы подвести итог: как мне преобразовать a массив байтов в строку, а затем эта строка обратно в тот же массив байтов, с которого я начал?

3 68

3 ответа:

самый безопасный способ конвертировать байты в строку и обратно - это использовать base64:

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

таким образом, Вы гарантированно не получите "недопустимые" последовательности Юникода, такие как первая половина суррогатной пары без второй половины. Ничего не происходит, чтобы решить, для того чтобы нормализовать данные в что-то странное (это все ASCII). Нет никаких шансов использовать кодовые точки, которые не зарегистрированы в Unicode или что-то в этом роде. О, и вы можете вырезать и вставить без особого страха, тоже.

Да, вы получаете 4 символа на каждые 3 байта-но это небольшая цена за знание того, что ваши данные не будут повреждены.

Вы можете просто использовать 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);
}

вы можете использовать Convert.Документация ToBase64http://msdn.microsoft.com/en-us/library/dhx0d524.aspx