Hexdump: конвертировать между байтами и двухбайтовыми десятичными

62
7

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

спросил(а) 2021-01-19T14:51:50+03:00 2 месяца, 3 недели назад
1
Решение
114

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

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

ответил(а) 2021-01-19T14:51:50+03:00 2 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема