Как я могу безопасно преобразовать массив байт в строку и обратно? [дубликат]
этот вопрос уже есть ответ здесь:
- как получить согласованное байтовое представление строк в C# без указания кодировки вручную? 38 ответов
Я действительно не забочусь о кодировании и прочее, пока я получаю обратно тот же самый массив байтов.
Итак, чтобы подвести итог: как мне преобразовать a массив байтов в строку, а затем эта строка обратно в тот же массив байтов, с которого я начал?
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