Wie drucke ich die (numerischen) ASCII-Werte jedes Zeichens in einer Datei?


11

Wie kann ich die numerischen ASCII-Werte jedes Zeichens in einer Textdatei drucken? Wie cat, aber nur die ASCII-Werte anzeigen ... (hexadezimal oder dezimal ist in Ordnung).

Die Beispielausgabe für eine Datei mit dem Wort Apple (mit Zeilenvorschub) sieht möglicherweise folgendermaßen aus:

065 112 112 108 101 013 004

Antworten:


17

Der Standardbefehl dafür ist odfür Oktal-Dump (obwohl Sie mit Optionen von Oktal zu Dezimal oder Hexadezimal wechseln können ...):

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

Beachten Sie, dass der Bytewert jedes Bytes in der Datei ausgegeben wird. Es hat nichts mit ASCII oder einem anderen Zeichensatz zu tun.

Wenn die Datei ein A in einem bestimmten Zeichensatz enthält und Sie 65 sehen möchten, da dies das für A in ASCII verwendete Byte ist, müssen Sie Folgendes tun:

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

Um diese Datei zuerst in ASCII zu konvertieren und dann die entsprechenden Bytewerte zu sichern. Zum Beispiel Apple<LF>in EBCDIC-UK wäre 193 151 151 147 133 37( 301 227 227 223 205 045in Oktal).

$ 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, Oder $YOUR_FAVORITE_LANGUAGEkann das alles tun.

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

Hervorragende Antwort, danke. Besonders Hexdump -C. Verliehen an Stephane, einfach weil seine Antwort ebenfalls geklärt war und er der Erste war (nur um ein Haar), aber beide sind ausgezeichnet.
Mtl Dev

Noch ein Befehl: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: falsch. Es kann eine Binärdatei unter Windows
beschädigen

@heemayl stdin verwendet standardmäßig den Textmodus, der Zeilenumbrüche ( os.linesep-> '\n')
jfs
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.