Procedura: 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.
Esempio
In questo esempio viene restituito il valore esadecimale di ogni carattere in un oggetto string. Viene innanzitutto analizzato l'oggetto string in una matrice di caratteri. Viene quindi chiamato il metodo ToInt32(Char) su ogni carattere per ottenere il valore numerico. Infine, il numero viene formattato come rappresentazione 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 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
*/
In questo esempio viene analizzato un oggetto string di valori esadecimali e viene restituito il carattere corrispondente a ogni valore esadecimale. Viene innanzitutto chiamato il metodo Split(array<Char[]) per ottenere ogni valore esadecimale come singolo oggetto string in una matrice. Viene quindi chiamato il metodo ToInt32(String, Int32) per convertire il valore esadecimale in un valore decimale rappresentato come int. Vengono illustrate due modalità diverse per ottenere il carattere corrispondente al codice di tale carattere. La prima tecnica utilizza ConvertFromUtf32(Int32), che restituisce il carattere corrispondente all'argomento integer come string. La seconda tecnica esegue il cast in modo esplicito del valore int in 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 !
*/
In questo esempio viene illustrato un modo alternativo per convertire un oggetto string esadecimale in un intero, chiamando il metodo Parse(String, NumberStyles).
string hexString = "8E2";
int num = Int32.Parse(hexString, System.Globalization.NumberStyles.HexNumber);
Console.WriteLine(num);
//Output: 2274
Nell'esempio seguente viene mostrato come convertire un oggetto string esadecimale in un oggetto float tramite la classe System.BitConverter e il metodo 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
Nell'esempio seguente viene mostrato come convertire una matrice di 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
*/
Vedere anche
Attività
Procedura: determinare se una stringa rappresenta un valore numerico (Guida per programmatori C#)
Riferimenti
Tipi (Guida per programmatori C#)