十六进制字符串到C#中的数字?

十六进制字符串到C#中的数字?,c#,.net,C#,.net,如何将十六进制字符串转换为C#中的数字 我尝试了以下方法,但结果为负值: var dec1 = long.Parse("F0A6AFE69D2271E7", System.Globalization.NumberStyles.HexNumber); // Result: dec1 = -1106003253459258905 在Javascript中,它可以正常工作,如下所示: var dec2 = parseInt("F0A6AFE69D2271E7", 16); // Result: de

如何将十六进制字符串转换为C#中的数字

我尝试了以下方法,但结果为负值:

var dec1 = long.Parse("F0A6AFE69D2271E7", System.Globalization.NumberStyles.HexNumber);
// Result: dec1 = -1106003253459258905
在Javascript中,它可以正常工作,如下所示:

var dec2 = parseInt("F0A6AFE69D2271E7", 16);
// Result: dec2 = 17340740820250292000 

您正在分析的数字超出了
long
-
long的范围。MaxValue
是0x7fffffffffffff,您的值是0xF0A6AFE69D2271E7

改为使用
ulong.Parse
,这样就可以了


我怀疑它在JavaScript中“起作用”,因为(在编写本文时)所有JavaScript数字都是64位浮点值,所以范围很大,但精度较低,这就是为什么值明显是奇数(最后一个十六进制数字7)正在给出一个偶数结果。

您正在分析的数字超出了
long
-
long的范围。MaxValue
为0x7FFFFFFFFFFFFFFF,您的值为0xF0A6AFE69D2271E7

改为使用
ulong.Parse
,这样就可以了


我怀疑它在JavaScript中“起作用”,因为(在编写本文时)所有JavaScript数字都是64位浮点值,因此具有很大的范围-但精度较低,这就是为什么一个明显为奇数(最后一个十六进制数字7)的值会给出偶数结果的原因。

请参阅以了解您的数字被解释为负数的原因。说实话,这不是“超出范围”的问题,只是十六进制表示给出了确切的负数。“long”类型是有符号整数,不能包含64位正数,因为其MSB保留用于表示负数。尝试改用“ulong”。

请参阅以了解您的数字被解释为负数的原因。说实话,这不是“超出范围”的问题,只是十六进制表示给出了确切的负数。“long”类型是有符号整数,不能包含64位正数,因为其MSB保留用于表示负数。尝试改用“ulong”。

提示:
long.MaxValue
9223372036854775807
在JavaScript中工作不正常,一些低位丢失。提示:
long.MaxValue
9223372036854775807
在JavaScript中工作不正常,一些低位丢失。