我尝试将十六进制字符串转换为十进制值,但它没有给我预期的结果
我尝试了convert.toint32(hexa,16)
,convert.todecimal(hexa)
。
我的字符串看起来像这样:
我将其转换为:
我知道结果是:
我需要你的帮助
非常感谢你的帮助:))
答案 0 :(得分: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
当然,您可以在之后将结果转换为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。