如何打印文件中每个字符的(数字)ASCII值?


11

如何在文本文件中打印每个字符的数字ASCII值。类似于cat,但仅显示ASCII值...(十六进制或十进制就可以)。

包含单词Apple(带有换行符)的文件的示例输出可能类似于:

065 112 112 108 101 013 004

Answers:


17

标准针对的命令是od,八进制转储(虽然选项,你可以从八进制到十进制或十六进制...更改):

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

请注意,它输出文件中每个字节的字节值。它与ASCII或任何其他字符集无关。

如果文件在给定的字符集中包含A,并且您希望看到65,因为这是ASCII中用于A的字节,那么您需要执行以下操作:

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

首先将该文件转换为ascii,然后转储相应的字节值。例如,Apple<LF>在EBCDIC-UK中将是193 151 151 147 133 37301 227 227 223 205 045八进制)。

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

14

hexdumpodxxd,或$YOUR_FAVORITE_LANGUAGE都可以做到这一点。

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

很好的答案,谢谢。特别是hexdump -C。仅仅因为他的回答也得到了解决而被授予史蒂芬(Stephane),他是第一名(仅凭一根头发),但两者都很出色。
Mtl Dev

另一个命令: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:错。它可能会损坏Windows上的二进制文件
jfs

@heemayl stdin默认使用文本模式,该模式可能会转换换行符(os.linesep-> '\n'
jfs
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.