Нахождение правильной формулы для закодированного шестнадцатеричного значения в десятичном виде - PullRequest
3 голосов
/ 04 марта 2011

У меня есть случай, когда я пытаюсь выяснить, как шестнадцатеричное число преобразуется в десятичное число.

У меня был похожий случай раньше, но я обнаружил, что если я перевернул шестнадцатеричную строку и поменял местами каждое второе значение (little-endian), то, преобразовав его обратно в десятичное значение, я получил то, что хотел, но этот разные.

вот значения, которые мы получили

Значение №. 1 является Дек: 1348916578 Hex: 0a66ab46

Пока у меня только один десятичный / шестнадцатеричный код, но я пытаюсь получить больше значений для сравнения результатов.

Я надеюсь, что любой гений математики сможет увидеть, какую формулу здесь можно использовать:)

спасибо

Ответы [ 4 ]

11 голосов
/ 04 марта 2011
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 меняет порядок бит в клочке; хотя я вижу, что обращение может быть выполнено и побайтово.

4 голосов
/ 04 марта 2011

Интересно .... Я расширил десятичную и шестнадцатеричную форму в двоичную, и вот что вы получите, соответственно:

1010000011001101101010101100010
1010011001101010101101000110

Сдвиньте нижнюю, добавив несколько нулей, а затем разделите на 8-байтовые блоки.

10100000 1100110 11010101 01100010
10100    1100110 10101011 01000110

Кажется, он начинает выстраиваться.Давайте сделаем нижнюю часть похожей на верхнюю.

Дополните первый блок нулями, и он будет равен.Второй блок в порядке.Переключите 3-й блок (переверните его), и 10101011 станет 11010101.

10100000 1100110 11010101 01000110

Аналогично с 4-м.
10100000 1100110 11010101 01100010

Теперь они одинаковы.

10100000 1100110 11010101 01100010
10100000 1100110 11010101 01100010

Будет ли это работать для всех случаев?Невозможно знать.

0 голосов
/ 23 февраля 2012

Мы обнаружили, что наш минимальный USB-ридер, который дал 10-битный десятичный формат, на самом деле не показывает весь двоичный код. Шестнадцатеричный читатель находит полный двоичный код. Таким образом, по существу, можно преобразовать шестнадцатеричное значение в 10-битное десятичное, сняв 9 символов после двоичного преобразования.

Но это не работает наоборот (если мы не уберем 2 символа из шестнадцатеричного значения, 10-битный десятичный код покажет только часть полного двоичного кода).

Итак, дело закрыто.

0 голосов
/ 04 марта 2011

Десятичное значение x0a66ab46 равно 174500678 или 1185637898 (в зависимости от того, какой порядковый номер вы используете, с любым 8, 16 или 32-битным доступом). Кажется, нет прямой связи между этими ценностями. Может быть, вы просто ошиблись парой? Это может помочь, если вы разместите некоторый код о том, как вы генерируете эти пары значений.

Кстати, у Delphi есть небольшой метод для этого: SysUtils.IntToHex

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...