Udostępnij za pośrednictwem


Jak konwertować między ciągami szesnastkowymi i typami liczbowymi (Przewodnik programowania w języku C#)

W poniższych przykładach pokazano, jak wykonywać następujące zadania:

Przykłady

W tym przykładzie jest zwracana wartość szesnastkowa każdego znaku w string. Najpierw parsuje string do tablicy znaków. Następnie wywołuje ToInt32(Char) dla każdego znaku, aby uzyskać jego wartość liczbową. Na koniec formatuje liczbę jako reprezentację szesnastkową w formacie 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
 */

Analizowany jest przykład z wartościami szesnastkowymi oznaczonymi jako string, a następnie zwracany jest znak odpowiadający każdej z tych wartości. Najpierw wywołuje metodę Split(Char[]), aby uzyskać każdą z wartości szesnastkowych jako pojedynczy string w tablicy. Następnie wywołuje ToInt32(String, Int32), aby przekonwertować wartość szesnastkową na wartość dziesiętną reprezentowaną jako int. Przedstawia dwa różne sposoby uzyskiwania znaku odpowiadającego kodowi tego znaku. Pierwsza technika używa ConvertFromUtf32(Int32), która zwraca znak odpowiadający argumentowi liczby całkowitej jako string. Druga technika jawnie rzutuje int na znak typu 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 !
*/

W tym przykładzie pokazano inny sposób konwertowania liczby szesnastkowej string na liczbę całkowitą, wywołując metodę Parse(String, NumberStyles).

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

W poniższym przykładzie pokazano, jak przekonwertować liczbę szesnastkową string na liczbę zmiennoprzecinkową przy użyciu klasy System.BitConverter i metody 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 = {f}");

// Output: 200.0056

W poniższym przykładzie pokazano, jak przekonwertować tablicę bajtów na ciąg szesnastkowy przy użyciu klasy 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
 */

W poniższym przykładzie pokazano, jak przekonwertować tablicę bajtów na ciąg szesnastkowy, wywołując metodę Convert.ToHexString wprowadzoną na platformie .NET 5.0.

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

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

/*Output:
  646F74636574
 */

Zobacz też