如何:在十六进制字符串与数值类型之间转换(C# 编程指南)How to: Convert Between Hexadecimal Strings and Numeric Types (C# Programming Guide)

以下示例演示如何执行下列任务:These examples show you how to perform the following tasks:

  • 获取字符串中每个字符的十六进制值。Obtain the hexadecimal value of each character in a string.

  • 获取与十六进制字符串中的每个值对应的 charObtain the char that corresponds to each value in a hexadecimal string.

  • 将十六进制 string 转换为 intConvert a hexadecimal string to an int.

  • 将十六进制 string 转换为 floatConvert a hexadecimal string to a float.

  • 字节数组转换为十六进制 stringConvert a byte array to a hexadecimal string.

示例Example

此示例输出 string 中每个字符的十六进制值。This example outputs the hexadecimal value of each character in a string. 首先,将 string 分析为字符数组。First it parses the string to an array of characters. 然后,对每个字符调用 ToInt32(Char)获取相应的数值。Then it calls ToInt32(Char) on each character to obtain its numeric value. 最后,在 string 中将数字的格式设置为十六进制表示形式。Finally, it formats the number as its hexadecimal representation in a 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
 */

示例Example

此示例分析十六进制值的 string 并输出对应于每个十六进制值的字符。This example parses a string of hexadecimal values and outputs the character corresponding to each hexadecimal value. 首先,调用 Split(Char[]) 方法以获取每个十六进制值作为数组中的单个 stringFirst it calls the Split(Char[]) method to obtain each hexadecimal value as an individual string in an array. 然后,调用 ToInt32(String, Int32)将十六进制值转换为表示为 int 的十进制值。示例中演示了 2 种不同方法,用于获取对应于该字符代码的字符。Then it calls ToInt32(String, Int32) to convert the hexadecimal value to a decimal value represented as an int. It shows two different ways to obtain the character corresponding to that character code. 第 1 种方法是使用 ConvertFromUtf32(Int32),它将对应于整型参数的字符作为 string 返回。The first technique uses ConvertFromUtf32(Int32), which returns the character corresponding to the integer argument as a string. 第 2 种方法是将 int 显式转换为 charThe second technique explicitly casts the int to a 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 !
*/

示例Example

此示例演示了将十六进制 string 转换为整数的另一种方法,即调用 Parse(String, NumberStyles) 方法。This example shows another way to convert a hexadecimal string to an integer, by calling the Parse(String, NumberStyles) method.

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

示例Example

下面的示例演示了如何使用 System.BitConverter 类和 UInt32.Parse 方法将十六进制 string 转换为 floatThe following example shows how to convert a hexadecimal string to a float by using the System.BitConverter class and the UInt32.Parse method.


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            

示例Example

下面的示例演示了如何使用 System.BitConverter 类将字节数组转换为十六进制字符串。The following example shows how to convert a byte array to a hexadecimal string by using the System.BitConverter class.

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
 */

请参阅See also