Como imprimo os valores ASCII (numéricos) de cada caractere em um arquivo?

10

Como posso imprimir os valores numéricos ASCII de cada caractere em um arquivo de texto. Como cat , mas mostrando apenas os valores ASCII ... (hex ou decimal é bom).

Exemplo de saída para um arquivo contendo a palavra Apple (com um avanço de linha) pode ser semelhante a:

065 112 112 108 101 013 004
    
por Mtl Dev 08.03.2016 / 22:08

2 respostas

13

O comando padrão para isso é od , para octal dump (embora com opções , você pode mudar de octal para decimal ou hexadecimal ...):

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

Observe que ele gera o valor de byte de cada byte no arquivo. Não tem nada a ver com ASCII ou qualquer outro conjunto de caracteres.

Se o arquivo contém um A em um determinado conjunto de caracteres, e você gostaria de ver 65, porque esse é o byte usado para A em ASCII, então você precisaria fazer:

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

Primeiro converta esse arquivo para ascii e, em seguida, despeje os valores de byte correspondentes. Por exemplo, Apple<LF> em EBCDIC-UK seria 193 151 151 147 133 37 ( 301 227 227 223 205 045 em octal).

$ printf '177355' | iconv -f ebcdic-uk -t ascii | od -An -vtu1
  65 112 112 108 101  10
    
por 08.03.2016 / 22:12
13

hexdump , od , xxd ou $YOUR_FAVORITE_LANGUAGE podem fazer isso.

% 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)
% 
    
por 08.03.2016 / 22:12