Come stampare i valori (numerici) ASCII di ciascun carattere in un file?


11

Come posso stampare i valori numerici ASCII di ciascun carattere in un file di testo. Come cat, ma mostrando solo i valori ASCII ... (esadecimale o decimale va bene).

L'output di esempio per un file contenente la parola Apple (con un feed di riga) potrebbe apparire come:

065 112 112 108 101 013 004

Risposte:


17

Il comando standard per questo è od, per il dump ottale (anche se con le opzioni, puoi cambiare da ottale a decimale o esadecimale ...):

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

Si noti che genera il valore byte di ogni byte nel file. Non ha nulla a che fare con ASCII o altri set di caratteri.

Se il file contiene una A in un determinato set di caratteri e ti piacerebbe vedere 65, poiché quello è il byte utilizzato per A in ASCII, allora dovresti fare:

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

Per prima cosa converti quel file in ascii e poi scarica i corrispondenti valori di byte. Ad esempio Apple<LF>in EBCDIC-UK sarebbe 193 151 151 147 133 37( 301 227 227 223 205 045in ottale).

$ 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, O $YOUR_FAVORITE_LANGUAGEpossono essere tutti farlo.

% 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)
% 

Ottima risposta, grazie. Soprattutto hexdump -C. Assegnato a Stephane semplicemente perché anche la sua risposta si è risolta, ed è stato il primo (solo per un pelo), ma entrambi sono eccellenti.
Mtl Dev

Ancora un altro 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: sbagliato. Potrebbe corrompere un file binario su Windows
jfs

@heemayl stdin utilizza la modalità testo per impostazione predefinita che può tradurre newline ( os.linesep-> '\n')
jfs
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.