Hexdump: конвертировать между байтами и двухбайтовыми десятичными
Когда я использую hexdump
для файла без параметров, я получаю строки шестнадцатеричных байтов:
cf fa ed fe 07 00 00 01 03 00 00 80 02 00 00 00
Когда я использовал hexdump -d
для одного и того же файла, эти же данные отображаются в так называемых двухбайтовых десятичных группировках:
64207 65261 00007 00256 00003 32768 00002 00000
Итак, я пытаюсь выяснить, как преобразовать эти две кодировки. cf
и fa
в десятичном формате - 207
и 250
соответственно. Как эти числа объединяются в 64207
?
Бонусный вопрос: в чем преимущество использования этих группировок? На восьмеричном дисплее используются 16 групп по три цифры, почему бы не использовать то же самое с десятичным дисплеем?
Как прокомментировал @georg.
0xfa * 256 + 0xcf == 0xfacf == 64207
Конвертация точно так работает.
Итак, если вы видите man hexdump
:
-d, --two-bytes-decimal
Two-byte decimal display. Display the input offset in hexadecimal, followed by eight
space-separated, five-column, zero-filled, two-byte units of input data, in unsigned
decimal, per line.
Так, например:
00000f0 64207 65261 00007 00256 00003 32768 00002 00000
Здесь 00000f0
- шестнадцатеричное смещение.
Далее следуют двухбайтовые единицы входных данных, например: 64207
в десятичном виде (первые 16 битов, т.е. два байта файла).
Конверсия (в вашем случае):
cf fa
→ двухбайтовый блок (порядок байтов зависит от вашей архитектуры).
fa * 256 + cf = facf
→ соответственно → 0xfacf
(переупорядочение)
И dec of oxfacf
составляет 64207
.
Бонусный вопрос: принято отображать восьмеричные числа, используя три цифры (в отличие от шестнадцатеричного и десятичного), поэтому для каждого байта используется триплет.