如何将十六进制字符串转换为十进制值

Clé*_*ard 6 c# hex decimal type-conversion

我试图将十六进制字符串转换为十进制值,但它没有给我预期的结果

我试过convert.toint32(hexa,16),convert.todecimal(hexa).

我有一个字符串看起来像这样:

  • 1 12 94 201 198

我把它转换成:

  • 10C5EC9C6

我知道结果是:

  • 4502505926

我需要你的帮助

非常感谢您的帮助 :)

Oli*_*bes 8

System.Decimal(C# decimal)类型是浮点型,并且不允许所述NumberStyles.HexNumber指定符.System.Int32(C#int)类型的允许值范围不足以进行转换.但您可以使用System.Int64(C#long)类型执行此转换:

string s = "10C5EC9C6";
long n = Int64.Parse(s, System.Globalization.NumberStyles.HexNumber);
'n ==> 4502505926
Run Code Online (Sandbox Code Playgroud)

当然,您可以将结果转换为decimal后续:

decimal d = (decimal)Int64.Parse(s, System.Globalization.NumberStyles.HexNumber);
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用十进制编码的十六进制组直接转换原始字符串,并将转换保存为十六进制字符串.

string s = "1 12 94 201 198";
string[] groups = s.Split();
long result = 0;
foreach (string hexGroup in groups) {
    result = 256 * result + Int32.Parse(hexGroup);
}
Console.WriteLine(result); // ==> 4502505926
Run Code Online (Sandbox Code Playgroud)

因为一个组代表2个十六进制数字,所以我们乘以16*16 = 256.