-1

これは本当に厄介です。私は 2 つの 16 進数を持っており、そのうちの 1 つは正確に 2 増分されていると 90% 確信しています。ただし、オンラインの16進数から10進数への計算機にそれらを入力すると、同じ結果になります。どうすればいいの?

lower number at
0x00010471000001BF001F = 18766781122258862000

higher number at
0x00010471000001BF0021 = 18766781122258862000

? 何が起こっている ?

私が使用した計算は... http://www.rapidtables.com/convert/number/hex-to-decimal.htm

4

3 に答える 3

2

大きい方の数値は 1 ではなく 2 です。0x00010471000001BF0020 はその間にあります。数値が非常に大きいため、問題はオーバーフローの問題に関連していると思います。おそらく、使用している計算機が値を浮動小数点に変換しているため、精度が低下しています。

投稿する値を表すには、少なくとも 9 バイト (または少なくとも 65 ビット) が必要です。

于 2012-11-22T10:23:17.913 に答える
0

まず最初に、なぜこの質問を C# タグの下に分類したのですか? この問題は、値が大きすぎて、コンバーターが大きな数値でうまく機能しないことが原因であることがほとんどです。

これは C# でタグ付けされているためです。.NET コンポーネント System.Numerics への参照を追加します。大きな 16 進数から整数に変換するには、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

最初に 16 進数の基本的な知識は、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 に答える