Bir dosyadaki her karakterin (sayısal) ASCII değerlerini nasıl yazdırabilirim?


11

Bir metin dosyasındaki her karakterin sayısal ASCII değerlerini nasıl yazdırabilirim. Gibi cat, ama sadece ASCII değerlerini göstermek ... (onaltılık veya ondalık iyidir).

Apple kelimesini içeren bir dosya için örnek çıktı (satır beslemeli) şöyle görünebilir:

065 112 112 108 101 013 004

Yanıtlar:


17

Bunun için standart komut od, sekizlik dökümü için (seçeneklerle birlikte, sekizlikten onluya veya onaltılıya değiştirebilirsiniz ...):

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

Dosyadaki her baytın bayt değerini verdiğini unutmayın. ASCII veya başka bir karakter seti ile ilgisi yoktur.

Dosya belirli bir karakter kümesinde A içeriyorsa ve 65 görmek istiyorsanız, çünkü ASCII'de A için kullanılan bayt budur, o zaman yapmanız gerekir:

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

Önce bu dosyayı ascii'ye dönüştürün ve ardından ilgili bayt değerlerini dökün. Örneğin Apple<LF>EBCDIC-İngiltere'de 193 151 151 147 133 37( 301 227 227 223 205 045sekizli) olacaktır.

$ 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, Veya $YOUR_FAVORITE_LANGUAGEtüm bu yapabilirsiniz.

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

Mükemmel cevap, teşekkür ederim. Özellikle hexdump -C. Stephane'ye sadece cevabı da çözüldüğü için verildi ve ilk önce (sadece bir saçla), ancak ikisi de mükemmel.
Mtl Dev

Yine başka bir komut: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: yanlış. Windows'da bir ikili dosyayı bozabilir
jfs

@heemayl stdin, satırsonlarını çevirebilecek metin modunu varsayılan olarak kullanır ( os.linesep-> '\n')
jfs
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.