Как они конвертируют десятичное в шестнадцатеричное так быстро (на уме)? - PullRequest
9 голосов
/ 28 ноября 2010

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

Мне было интересно, есть ли какой-нибудь короткий путь для этого преобразования?инженер и программист низкого уровня (сборка, встраивание).Это БОЛЬШОЙ ПЛЮС, если он может считать, складывать, вычитать и думать в терминах HEX вместо десятичной.Если у вас есть какие-либо советы для этого, пожалуйста, поделитесь.

Ответы [ 3 ]

6 голосов
/ 29 ноября 2010

Вам нужно знать основные преобразования 0-16, 0x0-0xF и 0b0-0b1111 по hart.

Остальное вы узнаете с повторением. Вот некоторые часто повторяющиеся паттерны, за которыми нужно следить.

Множественные:

  • 1024 (1К) - 0x400
  • (1024 * 1024) 1048567 (1М) составляет 0x100000
  • просто умножьте на 4, чтобы получить размер 4M как 0x400000.

Аналогично для битовых позиций вы можете узнать десятичные значения

  • MSB 16-битного слова - 0x8000 или 32768 или 32K
  • Таким образом, следующий бит имеет значение 0x4000 или 16384 или 16K

Эти паттерны повторяются повсюду, и со временем вы начнете их изучать.

Если у вас есть двоичное представление, легко сгруппировать биты в группы по четыре и быстро преобразовать в двоичное представление.

Единственный реалистичный способ найти десятичное значение 0xA1B587DE - это использовать калькулятор (или невероятно хорошо разбираться в математике). Но ближайшая граница 1К вниз от 0xA1B587DE - это 0xA1B58400, что легко, если вы знаете шаблоны.

Из ваших комментариев на код операции:
Для процессоров RISC большинство инструкций только первые несколько битов в командном слове определяют семейство инструкций (mov, jump и, или, ...), а остальные - просто параметры. Если вы работаете с процессором достаточно, вы начнете изучать их.

3 голосов
/ 09 июля 2015

Это довольно просто, когда вы понимаете основы систем нумерации. Шестнадцатеричное - это основание 16, то есть 1 (dec) = 0x01; но 16 (декабрь) = 0x10.

всякий раз, когда вы видите десятичное число, скажем, 39:

разделите это на 16 и просто возьмите частное - это 2 (2 * 16 = 32) остаток 7 (39 - 32)

Значение HEX десятичного 39, следовательно: 0x27.

Теперь, конвертируйте его обратно в десятичное число: 0x27 = 2 * 16 + 7 = 39 десятичное число:)

Надеюсь, у вас есть идея !!

2 голосов
/ 28 ноября 2010

http://quashnick.net/geek_stuff/HEX2DEC.html

Вот процедура.Отдых это математика.если вы можете делать умножения и деления на лету, у вас не должно возникнуть проблем с преобразованием десятичного числа в шестнадцатеричное или наоборот.

...