Come posso convertire in modo sicuro un array di byte in una stringa e tornare indietro?

Non mi interessa davvero la codifica e le cose, a patto che torni esattamente lo stesso array di byte.

Quindi riassumendo: come posso convertire un array di byte in una stringa e poi quella stringa nello stesso array di byte con cui ho iniziato?

Il modo più sicuro per convertire i byte in una stringa e viceversa è usare base64:

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

In questo modo ti garantisci di non ottenere sequenze unicode “non valide” come la prima metà di una coppia surrogata senza la seconda metà. Niente deciderà di normalizzare i dati in qualcosa di strano (è tutto ASCII). Non c’è possibilità di utilizzare i punti di codice che non sono registrati in Unicode, o qualcosa del genere. Oh, e puoi anche tagliare e incollare senza troppa paura.

Sì, si finisce con 4 caratteri per ogni 3 byte – ma questo è un piccolo prezzo da pagare per la consapevolezza che i tuoi dati non saranno corrotti.

Puoi semplicemente usare la class Convert come sotto.

 ///  /// Converts a string to byte array ///  /// The string /// The byte array public static byte[] ConvertToByteArray(string input) { return input.Select(Convert.ToByte).ToArray(); } ///  /// Converts a byte array to a string ///  /// the byte array /// The string public static string ConvertToString(byte[] bytes) { return new string(bytes.Select(Convert.ToChar).ToArray()); } ///  /// Converts a byte array to a string ///  /// the byte array /// The string public static string ConvertToBase64String(byte[] bytes) { return Convert.ToBase64String(bytes); } 

È ansible utilizzare la documentazione Convert.ToBase64 http://msdn.microsoft.com/en-us/library/dhx0d524.aspx