web-dev-qa-db-fra.com

Comment puis-je convertir en toute sécurité un tableau d'octets en une chaîne et inversement?

Je ne me soucie pas vraiment du codage et des trucs, tant que je récupère exactement le même tableau d'octets.

Donc, pour résumer: comment puis-je convertir un tableau d'octets en une chaîne, puis cette chaîne dans le même tableau d'octets avec lequel j'ai commencé?

84
Svish

La façon la plus sûre de convertir des octets en chaîne et inversement est d'utiliser base64:

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

De cette façon, vous êtes assuré de ne pas obtenir de séquences unicode "invalides" telles que la première moitié d'une paire de substitution sans la seconde moitié. Rien ne va décider de normaliser les données en quelque chose d'étrange (tout est ASCII). Il n'y a aucune chance d'utiliser des points de code qui ne sont pas enregistrés dans Unicode, ou quelque chose comme ça. Oh, et vous pouvez aussi couper et coller sans trop de crainte.

Oui, vous vous retrouvez avec 4 caractères pour 3 octets - mais c'est un petit prix à payer pour savoir que vos données ne seront pas corrompues.

159
Jon Skeet

Vous pouvez simplement utiliser la classe Convert comme ci-dessous.

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

Vous pouvez utiliser la documentation Convert.ToBase64 http://msdn.Microsoft.com/en-us/library/dhx0d524.aspx

2
Aragorn