¿Cómo imprimo los valores ASCII (numéricos) de cada carácter en un archivo?

11

¿Cómo puedo imprimir los valores ASCII numéricos de cada carácter en un archivo de texto? Me gusta cat, pero solo muestra los valores ASCII ... (hexadecimal o decimal está bien).

El resultado de ejemplo para un archivo que contiene la palabra Apple (con un salto de línea) podría verse así:

065 112 112 108 101 013 004
Mtl Dev
fuente

Respuestas:

17

El comando estándar para eso es od, para volcado octal (aunque con opciones, puede cambiar de octal a decimal o hexadecimal ...):

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

Tenga en cuenta que genera el valor de byte de cada byte en el archivo. No tiene nada que ver con ASCII ni con ningún otro conjunto de caracteres.

Si el archivo contiene una A en un conjunto de caracteres dado, y le gustaría ver 65, porque ese es el byte utilizado para A en ASCII, entonces deberá hacer lo siguiente:

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

Primero convertir ese archivo a ascii y luego volcar los valores de bytes correspondientes. Por ejemplo, Apple<LF>en EBCDIC-UK sería 193 151 151 147 133 37( 301 227 227 223 205 045en octal).

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

hexdump, od, xxd, O $YOUR_FAVORITE_LANGUAGEtodos pueden hacer eso.

% 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
fuente
Excelente respuesta, gracias. Especialmente hexdump -C. Otorgado a Stephane simplemente porque su respuesta también se resolvió, y él fue el primero (por un pelo), pero ambos son excelentes.
Mtl Dev
Sin embargo, otro comando: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: mal. Puede dañar un archivo binario en Windows
jfs
@heemayl stdin usa el modo de texto por defecto que puede traducir nuevas líneas ( os.linesep-> '\n')
jfs