-1

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

lower number at
0x00010471000001BF001F = 18766781122258862000

higher number at
0x00010471000001BF0021 = 18766781122258862000

? 到底是怎么回事 ?

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

4

3 回答 3

2

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

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

于 2012-11-22T10:23:17.913 回答
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
于 2012-11-22T15:42:08.850 回答
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

于 2012-11-22T10:26:54.117 回答