Что такое шестнадцатеричный дамп — что это значит?

#hexdump

#шестнадцатеричный дамп

Вопрос:

 thegladiator:~/cp$ cat new.txt
Hello World This is a Trest Progyy

thegladiator:~/cp$ hexdump new.txt
0000000 6548 6c6c 206f 6f57 6c72 2064 6854 7369
0000010 6920 2073 2061 7254 7365 2074 7250 676f
0000020 7979 000a                              
0000023
  

Как эти текстовые данные представлены в шестнадцатеричном формате подобным образом? Что это значит?

Комментарии:

1. Это не помогло? en.wikipedia.org/wiki/Hex_dump

2. Какая ОС? (это может помочь объяснить, почему байты меняются местами)

3. @S. Лотт: Это звучит очень похоже на ответ LMGTFY. meta.stackexchange.com/questions/15650 /…

4. Ubuntu / Linux . Wiki не помогла мне понять концепции настолько, насколько я хотел. Почему H равно 48? ASCII ?

5. @Nishant: Да, 48 — это ASCII для H. Однако по какой-то причине ваши байты меняются местами, как указывает Кевиндтимм. Не знаю, почему это происходит.

Ответ №1:

это именно то, что там написано, дамп данных в шестнадцатеричном формате:

 H 48 
e 65
l 6c
l 6c
o 6f
  

Хотя странно, что все байты поменялись местами (65 48: e H)

Если вы используете систему * nix, вы можете использовать ‘od -x’, или ‘man od’ подскажет вам все способы получения данных из od 🙂

Комментарии:

1. Похоже, что поменялись местами все байты, а не только некоторые из них.

2. Похоже, что это текст в кодировке ASCII с заменой байтов по какой-то причине. Смотрите asciitable.com

3. @John: Little-endian имеет отношение к числовому кодированию, а не к строковому. en.wikipedia.org/wiki/Endianness

4. Существует ли эквивалентный двоичный дамп?

5. @Eric Если это Linux, hexdump то формат вывода по умолчанию (который использовал OP) равен -x , который отображает данные в виде 16-разрядных целых чисел. Следовательно, проблема с порядковым номером является проблемой. OP должен попробовать с -c опцией, чтобы увидеть, исчезнет ли переключение.

Ответ №2:

Текст в файле new.txt хранится с использованием кодировки ASCII. Каждая буква представлена числом, десятичным: 32-127 шестнадцатеричным: 20-7F. Итак, первые три буквы ( H,e,l ) представлены десятичными числами: 72,101,108 и шестнадцатеричными числами: 48,65,6C

Hexdump по умолчанию принимает каждое 16-битное слово входного файла new.txt и выводит это слово в виде шестнадцатеричного числа. Поскольку он работает с 16 битами, а не с 8 битами, вы видите выходные данные в неожиданном порядке.

Если вы вместо этого используете xxd new.txt , вы увидите выходные данные в ожидаемом порядке.

Комментарии:

1. В паре? 8 бит должны быть представлены шестнадцатеричной парой .

2. 8 бит представлены двумя шестнадцатеричными цифрами. Итак, 4 из 48 — это четыре бита, а 8 — это остальные четыре бита

3. hd (который является символической ссылкой на шестнадцатеричный дамп и приводит к тому, что -C переключатель становится стандартным) также выдаст ожидаемый результат.