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

11

我尝试将一个十六进制字符串转换为十进制值,但它没有给出我期望的结果。

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

我有一个像这样的字符串:

  • 1 12 94 201 198

然后我将它转换为:

  • 10C5EC9C6

我知道结果是:

  • 4502505926

我需要你的帮助。

非常感谢你的帮助 :)

1个回答

18

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

当然,您可以在之后将结果转换为 decimal

decimal d = (decimal)Int64.Parse(s, System.Globalization.NumberStyles.HexNumber);
或者你可以直接将原始字符串转换成带有十进制编码的十六进制组,并将其保存为十六进制字符串,从而避免了将其转换为中间表示形式的步骤。
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

因为一个组表示2个十六进制数字,我们需要乘以16 * 16 = 256。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接