Làm cách nào để in các giá trị ASCII (số) của mỗi ký tự trong một tệp?


11

Làm cách nào tôi có thể in các giá trị ASCII số của từng ký tự trong tệp văn bản. Giống như cat, nhưng chỉ hiển thị các giá trị ASCII ... (hex hoặc thập phân là tốt).

Ví dụ đầu ra cho một tệp chứa từ Apple (với nguồn cấp dữ liệu) có thể trông như sau:

065 112 112 108 101 013 004

Câu trả lời:


17

Lệnh tiêu chuẩn cho điều đó là od, đối với kết xuất bát phân (mặc dù với các tùy chọn, bạn có thể thay đổi từ bát phân sang thập phân hoặc thập lục phân ...):

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

Lưu ý rằng nó xuất giá trị byte của mỗi byte trong tệp. Nó không có gì để làm với ASCII hoặc bất kỳ bộ ký tự nào khác.

Nếu tệp chứa A trong một bộ ký tự cho trước và bạn muốn xem 65, vì đó là byte được sử dụng cho A trong ASCII, thì bạn cần phải làm:

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

Đầu tiên để chuyển đổi tập tin đó thành ascii và sau đó kết xuất các giá trị byte tương ứng. Ví dụ, Apple<LF>trong EBCDIC-UK sẽ là 193 151 151 147 133 37( 301 227 227 223 205 045theo bát phân).

$ 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, Hoặc $YOUR_FAVORITE_LANGUAGEtất cả có thể làm điều đó.

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

Câu trả lời tuyệt vời, thankyou. Đặc biệt là hexdump -C. Được trao cho Stephane đơn giản vì câu trả lời của anh ấy cũng được giải quyết, và anh ấy là người đầu tiên (chỉ bằng một sợi tóc), nhưng cả hai đều xuất sắc.
Mtl Dev

Một lệnh khác:python -c "print open('file', 'rb').read().encode('hex')"
jfs

@JFSebastian Tốt hơnecho 'Apple' | python -c "import sys;print sys.stdin.read().encode('hex')"
heemayl

@heemayl: sai rồi. Nó có thể làm hỏng tệp nhị phân trên Windows
jfs

@heemayl stdin sử dụng chế độ văn bản theo mặc định có thể dịch các dòng mới ( os.linesep-> '\n')
jfs
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.