Come eseguire la conversione tra stringhe esadecimali e tipi numerici (Guida per programmatori C#)

In questi esempi viene mostrato come effettuare le seguenti attività:

  • Ottenere il valore esadecimale di ogni carattere in un oggetto string.

  • Ottenere l'oggetto char che corrisponde a ogni valore in una stringa esadecimale.

  • Convertire un oggetto string esadecimale in un oggetto int.

  • Convertire un oggetto string esadecimale in un oggetto float.

  • Convertire una matrice di byte in un oggetto string esadecimale.

Esempi

Questo esempio restituisce il valore esadecimale di ogni carattere in un oggetto string. Prima viene analizzato l'oggetto string in una matrice di caratteri. Poi viene chiamato ToInt32(Char) in ogni carattere per ottenere il rispettivo valore numerico. Il numero viene infine formattato come esadecimale in un oggetto 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
 */

Questo esempio analizza un oggetto string di valori esadecimali e restituisce il carattere corrispondente a ogni valore esadecimale. Prima viene chiamato il metodo Split(Char[]) per ottenere ogni valore esadecimale come singolo oggetto string in una matrice. Poi viene chiamato ToInt32(String, Int32) per convertire il valore esadecimale in un valore decimale rappresentato come int. Per ottenere il carattere corrispondente al codice di tale carattere vengono illustrate due modalità diverse. La prima tecnica usa string che restituisce il carattere corrispondente all'argomento Integer come ConvertFromUtf32(Int32). La seconda tecnica esegue il cast in modo esplicito del valore int a un valore 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 !
*/

Questo esempio illustra un altro modo per convertire un valore esadecimale string in un Integer, chiamando il metodo Parse(String, NumberStyles).

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

L'esempio seguente illustra come convertire un tipo string esadecimale in float usando la classe System.BitConverter e il metodo 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'esempio seguente illustra come convertire una matrice byte in una stringa esadecimale tramite 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
 */

Nell'esempio seguente viene illustrato come convertire una matrice di byte in una stringa esadecimale chiamando il metodo Convert.ToHexString introdotto in .NET 5.0.

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

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

/*Output:
  646F74636574
 */

Vedi anche