Як надрукувати (числові) значення ASCII кожного символу у файлі?


11

Як я можу надрукувати числові значення ASCII кожного символу у текстовому файлі. Можливо cat, але показ лише ASCII значень ... (шістнадцятковий або десятковий - це нормально).

Приклад виводу для файлу, що містить слово Apple (із стрічкою рядків), може виглядати так:

065 112 112 108 101 013 004

Відповіді:


17

Стандартна команда для цього є od, для вісімковій звалища (хоча з опціонами, ви можете змінити з вісімкових в десятковому або шістнадцятковому ...):

$ echo Apple | od -An -vtu1
  65 112 112 108 101  10

Зауважте, що воно виводить значення байтів кожного байта у файлі. Це не має нічого спільного з ASCII або будь-яким іншим набором символів.

Якщо файл містить A у заданому наборі символів, і ви хотіли б побачити 65, оскільки це байт, який використовується для A в ASCII, вам потрібно буде зробити:

< file iconv -f that-charset -t ascii | od -An -vtu1

Спочатку перетворіть цей файл в ascii, а потім скиньте відповідні значення байтів. Наприклад, Apple<LF>у EBCDIC-UK було б 193 151 151 147 133 37( 301 227 227 223 205 045у восьмериці).

$ printf '\301\227\227\223\205\045' | iconv -f ebcdic-uk -t ascii | od -An -vtu1
  65 112 112 108 101  10

14

hexdump, od, xxdАбо $YOUR_FAVORITE_LANGUAGEвсе це може зробити це.

% echo Apple | hexdump -C
00000000  41 70 70 6c 65 0a                                 |Apple.|
00000006
% echo Apple | perl -ne 'printf "%vd\n", $_' 
65.112.112.108.101.10
% echo Apple | clisp <( echo '(print (mapcar #'\''char-code (coerce (read-line *standard-input*) '\''list)))' )
(65 112 112 108 101)
% 

Відмінна відповідь, дякую. Особливо гексдумп -С. Присуджений Стефану просто тому, що його відповідь також вирішилася, і він був першим (просто волоссям), але обидва - чудові.
Мтл Дев

Ще одна команда:python -c "print open('file', 'rb').read().encode('hex')"
jfs

@JFSebastian Betterecho 'Apple' | python -c "import sys;print sys.stdin.read().encode('hex')"
heemayl

@heemayl: неправильно. Це може пошкодити двійковий файл у Windows
jfs

@heemayl stdin використовує текстовий режим за замовчуванням, який може переводити нові рядки ( os.linesep-> '\n')
jfs
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.