Как напечатать (числовые) значения ASCII каждого символа в файле?

11

Как я могу напечатать числовые значения ASCII каждого символа в текстовом файле. Как cat, но показаны только значения ASCII ... (шестнадцатеричное или десятичное хорошо).

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

065 112 112 108 101 013 004
Mtl Dev
источник

Ответы:

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)
% 
thrig
источник
Отличный ответ, спасибо. Особенно hexdump -C. Награжден Стефаном просто потому, что его ответ также решен, и он был первым (всего лишь на волосок), но оба превосходны.
Mtl Dev
Еще одна команда: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