查找十进制编码十六进制值的正确公式

时间:2011-03-04 12:34:33

标签: delphi math hex

我在这里有一个案例,我试图找出如何将十六进制数转换为十进制数。

之前我有类似的情况,但发现如果我颠倒了十六进制字符串,并交换了每一个值(little-endian),然后将其转换回十进制值,我得到了我想要的,但这个是不同。

这是我们收到的价值

价值nr。 1是 十二月:1348916578 十六进制:0a66ab46

我现在只有一个十进制/十六进制,但我想获得更多值来比较结果。

我希望那里的任何数学天才能够看到这里使用的公式:)

感谢

4 个答案:

答案 0 :(得分:11)

1348916578
= 5    0    6    6     D    5    6    2 hex
= 0101 0000 0110 0110  1101 0101 0110 0010

0a66ab46
= 0    A    6    6     A    B    4    6 hex
= 0000 1010 0110 0110  1010 1011 0100 0110

因此,如果数字是这样的,则以十六进制数字表示:

AB CD EF GH

然后可能的转换是:

rev(B) rev(A) rev(D) rev(C) rev(F) rev(E) rev(H) rev(G)

其中rev反转半字节中的位顺序;虽然我可以看到逆转也可以在逐字节的基础上完成。

答案 1 :(得分:4)

有趣....我将十进制和十六进制扩展为二进制,这就是你得到的,分别是:

1010000011001101101010101100010
1010011001101010101101000110

用一些0填充滑动底部一个,然后分成8个字节的块。

10100000 1100110 11010101 01100010
10100    1100110 10101011 01000110

似乎开始排队了。让我们让底部看起来像顶部。

用0来填充第一个块,它是相等的。 第二个块是好的。 切换第3个块(反转),10101011变为11010101。

10100000 1100110 11010101 01000110

与第4次同样     10100000 1100110 11010101 01100010

现在他们是一样的。

10100000 1100110 11010101 01100010
10100000 1100110 11010101 01100010

这适用于所有情况吗?不可能知道。

答案 2 :(得分:0)

x0a66ab46的十进制值是174500678或1185637898(取决于您使用的是哪个端点,具有任何8,16或32位访问权限)。这些值之间似乎没有直接联系。也许你只是错了?如果您发布了一些有关如何生成这些值对的代码,这可能会有所帮助。

BTW,Delphi有一个很好的方法:SysUtils.IntToHex

答案 3 :(得分:0)

我们发现我们的min USB读卡器提供10位十进制格式实际上并没有显示整个二进制代码。十六进制阅读器找到完整的二进制代码。所以基本上可以通过在二进制转换后取掉9个字符将十六进制值转换为10位十进制。

但是这不起作用(除非我们从十六进制值中删除2个字符,10位十进制代码只显示完整二进制代码的一部分)。

案件已经结案。