这真烦人,我有两个十六进制数字我90%肯定其中一个正好高出2个增量。但是,当我将它们输入到在线十六进制到十进制计算器时,它们会相同。怎么会这样?
lower number at
0x00010471000001BF001F = 18766781122258862000
higher number at
0x00010471000001BF0021 = 18766781122258862000
?发生了什么事?
我使用的计算方法是...... http://www.rapidtables.com/convert/number/hex-to-decimal.htm
答案 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