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

Ces exemples 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.

Exemples

Cet exemple génère la valeur hexadécimale de chaque caractère dans une string. Il convertit d’abord la string en un tableau de caractères. Ensuite, il appelle ToInt32(Char) sur chaque caractère afin d’obtenir sa valeur numérique. Pour finir, il représente le nombre sous 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 integer value to a hexadecimal value in string form.
    Console.WriteLine($"Hexadecimal value of {letter} is {value:X}");
}
/* 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. Il appelle d’abord la méthode Split(Char[]) pour obtenir chaque valeur hexadécimale sous la forme d’une string individuelle dans un tableau. Ensuite, il appelle ToInt32(String, Int32) pour convertir la valeur hexadécimale en valeur décimale représentée sous forme d’objet int. Il illustre deux manières d’obtenir le caractère correspondant à ce code de caractère. La première technique utilise string, qui retourne le caractère correspondant à l’argument entier sous forme de ConvertFromUtf32(Int32). La deuxième technique effectue un cast explicite de l’int en char.

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 un string hexadécimal en entier, en appelant 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 montre comment convertir un string hexadécimal en float à l’aide de la classe System.BitConverter et de la méthode UInt32.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 montre comment convertir un tableau d’octets en chaîne hexadécimale à l’aide de 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
 */

L’exemple suivant montre comment convertir un tableau d’octets en chaîne hexadécimale en appelant la méthode Convert.ToHexString introduite dans .NET 5.0.

byte[] array = [0x64, 0x6f, 0x74, 0x63, 0x65, 0x74];

string hexValue = Convert.ToHexString(array);
Console.WriteLine(hexValue);

/*Output:
  646F74636574
 */

Voir aussi