87 votes

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 chaîne, puis cette chaîne dans le même tableau d'octets avec lequel j'ai commencé?

164voto

Jon Skeet Points 692016

L'absolu de la façon la plus sûre pour convertir des octets d'une chaîne de caractères et à l'arrière est à utiliser en base64:

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

De cette façon, vous êtes assuré de ne pas devenir "invalide" unicode des séquences 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 (c'est de l'ASCII). Il n'y a aucune chance de l'aide de points de code qui ne sont pas inscrits dans Unicode, ou quelque chose comme ça. Oh, et vous pouvez couper et coller sans trop de peur, trop.

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

8voto

Ricky Points 1045

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);
}
 

2voto

Aragorn Points 504

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X