Cómo: Convertir cadenas hexadecimales en tipos numéricos (Guía de programación de C#)

En estos ejemplos se muestra cómo realizar las tareas siguientes:

  • Obtener el valor hexadecimal de cada uno de los caracteres de un elemento string.

  • Obtener el elemento char que corresponde a cada valor en una cadena hexadecimal.

  • Convertir un elemento string hexadecimal en un elemento int.

  • Convertir un elemento string hexadecimal en un elemento float.

  • Convertir una matriz de bytes en un elemento string hexadecimal.

Ejemplo

Este ejemplo genera el valor hexadecimal de cada uno de los caracteres de string. Primero, analiza string como una matriz de caracteres. Después, llama a ToInt32(Char) en cada uno de los caracteres para obtener sus respectivos valores numéricos. Finalmente, da formato al número como su representación hexadecimal en 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
 */

Este ejemplo analiza una string de valores hexadecimales y genera el carácter correspondiente a cada valor hexadecimal. Primero, llama al método Split(array<Char[]) para obtener cada valor hexadecimal como una string individual en una matriz. A continuación, llama a ToInt32(String, Int32) para convertir el valor hexadecimal en un valor decimal representado como un valor de tipo int. Muestra dos formas distintas de obtener el carácter correspondiente a ese código de carácter. En la primera técnica, se utiliza el método ConvertFromUtf32(Int32), que devuelve el carácter correspondiente al argumento de tipo entero como string. En la segunda técnica, int se convierte de forma explícita en un valor de tipo 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 !
*/

Este ejemplo muestra otra forma de convertir una string hexadecimal en un entero, que consiste en llamar al método Parse(String, NumberStyles).

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

El ejemplo siguiente muestra cómo convertir un elemento string hexadecimal en un elemento float mediante la clase System.BitConverter y el método 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            

El ejemplo siguiente muestra cómo convertir una matriz de bytes en una cadena hexadecimal mediante la clase 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
 */

Vea también

Tareas

Cómo: Determinar si una cadena representa un valor numérico (Guía de programación de C#)

Referencia

Tipos (Guía de programación de C#)

Conceptos

Cadenas con formato numérico estándar