Partager via


Comment : effectuer une conversion entre des chaînes hexadécimales et des types numériques (Guide de programmation C#)

Mise à jour : Juillet 2008

Ces exemples vous montrent comment effectuer les tâches suivantes :

  • Obtenir la valeur hexadécimale de chaque caractère dans une chaîne (string).

  • Obtenir la valeur char qui correspond à chaque valeur d'une chaîne hexadécimale.

  • Convertir une string hexadécimale en int.

  • Convertir une string hexadécimale en float.

  • Convertir un tableau d'octets en string hexadécimale.

Exemple

Cet exemple génère la valeur hexadécimale de chaque caractère dans une string. La string est d'abord convertie en un tableau de caractères. ToInt32(Char) est ensuite appelé sur chaque caractère afin d'obtenir sa valeur numérique. Enfin, le nombre est représenté sous sa forme hexadécimale dans une string.

string input = "Hello World!";
char[] values = input.ToCharArray();
foreach (char letter in values)
{
    // Get the integral value of the character.
    int value = Convert.ToInt32(letter);
    // Convert the decimal value to a hexadecimal value in string form.
    string hexOutput = String.Format("{0:X}", value);
    Console.WriteLine("Hexadecimal value of {0} is {1}", letter, hexOutput);
}
/* Output:
   Hexadecimal value of H is 48
    Hexadecimal value of e is 65
    Hexadecimal value of l is 6C
    Hexadecimal value of l is 6C
    Hexadecimal value of o is 6F
    Hexadecimal value of   is 20
    Hexadecimal value of W is 57
    Hexadecimal value of o is 6F
    Hexadecimal value of r is 72
    Hexadecimal value of l is 6C
    Hexadecimal value of d is 64
    Hexadecimal value of ! is 21
 */

Cet exemple analyse une string de valeurs hexadécimales et génère le caractère correspondant à chacune d'elles. La méthode Split(array<Char[]) est d'abord appelée pour obtenir chaque valeur hexadécimale sous la forme d'une string individuelle dans un tableau. ToInt32(String, Int32) est ensuite appelé pour convertir la valeur hexadécimale en valeur décimale représentée par un entier (int). Deux techniques permettant d'obtenir le caractère correspondant à ce code de caractère sont illustrées dans cet exemple. La première utilise ConvertFromUtf32(Int32), qui retourne le caractère correspondant à l'argument entier sous forme de string. La deuxième effectue un cast explicite de l'int vers un char (caractère).

string hexValues = "48 65 6C 6C 6F 20 57 6F 72 6C 64 21";
string[] hexValuesSplit = hexValues.Split(' ');
foreach (String hex in hexValuesSplit)
{
    // Convert the number expressed in base-16 to an integer.
    int value = Convert.ToInt32(hex, 16);
    // Get the character corresponding to the integral value.
    string stringValue = Char.ConvertFromUtf32(value);
    char charValue = (char)value;
    Console.WriteLine("hexadecimal value = {0}, int value = {1}, char value = {2} or {3}",
                        hex, value, stringValue, charValue);
}
/* Output:
    hexadecimal value = 48, int value = 72, char value = H or H
    hexadecimal value = 65, int value = 101, char value = e or e
    hexadecimal value = 6C, int value = 108, char value = l or l
    hexadecimal value = 6C, int value = 108, char value = l or l
    hexadecimal value = 6F, int value = 111, char value = o or o
    hexadecimal value = 20, int value = 32, char value =   or
    hexadecimal value = 57, int value = 87, char value = W or W
    hexadecimal value = 6F, int value = 111, char value = o or o
    hexadecimal value = 72, int value = 114, char value = r or r
    hexadecimal value = 6C, int value = 108, char value = l or l
    hexadecimal value = 64, int value = 100, char value = d or d
    hexadecimal value = 21, int value = 33, char value = ! or !
*/

Cet exemple montre une autre façon de convertir une string hexadécimale en nombre entier à l'aide de la méthode Parse(String, NumberStyles).

string hexString = "8E2";
int num = Int32.Parse(hexString, System.Globalization.NumberStyles.HexNumber);
Console.WriteLine(num);
//Output: 2274

L'exemple suivant indique comment convertir une string hexadécimale en float à l'aide de la classe System.BitConverter et de la méthode Int32.Parse.

string hexString = "43480170";
uint num = uint.Parse(hexString, System.Globalization.NumberStyles.AllowHexSpecifier);

byte[] floatVals = BitConverter.GetBytes(num);
float f = BitConverter.ToSingle(floatVals, 0);
Console.WriteLine("float convert = {0}", f);

// Output: 200.0056            

L'exemple suivant indique comment convertir un tableau d'octets en chaîne hexadécimale en utilisant la classe System.BitConverter.

byte[] vals = { 0x01, 0xAA, 0xB1, 0xDC, 0x10, 0xDD };

string str = BitConverter.ToString(vals);
Console.WriteLine(str);

str = BitConverter.ToString(vals).Replace("-", "");
Console.WriteLine(str);

/*Output:
  01-AA-B1-DC-10-DD
  01AAB1DC10DD
 */

Voir aussi

Tâches

Comment : déterminer si une chaîne représente une valeur numérique (Guide de programmation C#)

Concepts

Chaînes de format numériques standard

Référence

Types (Guide de programmation C#)

Historique des modifications

Date

Historique

Raison

Juillet 2008

Ajout des deux derniers exemples de code

Résolution des bogues de contenu.