为什么这两个十六进制数在在线计算中出现在同一个整数上?

时间:2012-11-22 10:17:14

标签: c# hex

这真烦人,我有两个十六进制数字我90%肯定其中一个正好高出2个增量。但是,当我将它们输入到在线十六进制到十进制计算器时,它们会相同。怎么会这样?

lower number at
0x00010471000001BF001F = 18766781122258862000

higher number at
0x00010471000001BF0021 = 18766781122258862000

?发生了什么事?

我使用的计算方法是...... http://www.rapidtables.com/convert/number/hex-to-decimal.htm

3 个答案:

答案 0 :(得分:2)

较高的数字是2而不是1. 0x00010471000001BF0020介于两者之间。我认为你的问题与溢出问题有关,因为数字非常大。您正在使用的计算器可能正在将值转换为浮点,这会降低精度。

您发布的值至少需要9个字节来表示(或至少65位)

答案 1 :(得分:0)

Hex的第一个基本知识应该告诉你20在1F和21之间,所以最高的数字是较低的数字+2。 其次,如果你使用一个未知的工具,你必须确保它是可靠的。您的工具显然无法处理如此大的数字。 Wolfram Alpha为您提供正确的答案: http://www.wolframalpha.com/input/?i=0x00010471000001BF001F+in+decimal http://www.wolframalpha.com/input/?i=0x00010471000001BF0021+in+decimal

答案 2 :(得分:0)

首先,为什么要在C#标签下对此问题进行分类? 这个问题最像是因为价值太大而转换器不能很好地处理大数字。

因为这是用C#标记的。 添加对.NET组件System.Numerics的引用。 要将大十六进制转换为整数,请使用BigInteger。

        System.Numerics.BigInteger a;
        System.Numerics.BigInteger.TryParse("00010471000001BF001F", System.Globalization.NumberStyles.HexNumber,null,out a);
        Console.WriteLine(a.ToString());
        System.Numerics.BigInteger.TryParse("00010471000001BF0021", System.Globalization.NumberStyles.HexNumber, null, out a);
        Console.WriteLine(a.ToString());

输出

18766781122258862111
18766781122258862113