Hexdump: конвертировать между байтами и двухбайтовыми десятичными - PullRequest
1 голос
/ 29 апреля 2019

Когда я использую 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 групп по три цифры, почему бы не использовать одно и то же с десятичным дисплеем?

1 Ответ

0 голосов
/ 29 апреля 2019

Как прокомментировал @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 * oxfacf равно 64207.

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

...