Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 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);
}