ฉันจะพิมพ์ค่า ASCII (ตัวเลข) ของอักขระแต่ละตัวในไฟล์ได้อย่างไร


11

ฉันจะพิมพ์ค่า ASCII ตัวเลขของอักขระแต่ละตัวในไฟล์ข้อความได้อย่างไร กดcatไลค์ แต่แสดงค่า ASCII เท่านั้น ... (ฐานสิบหกหรือทศนิยมเป็นปกติ)

ตัวอย่างเอาต์พุตสำหรับไฟล์ที่มีคำว่าApple (ที่มีการป้อนบรรทัด) อาจมีลักษณะดังนี้:

065 112 112 108 101 013 004

คำตอบ:


17

มาตรฐานคำสั่งสำหรับการที่เป็นodสำหรับการถ่ายโอนข้อมูลฐานแปด (แม้ว่าจะมีตัวเลือกคุณสามารถเปลี่ยนจากฐานแปดให้เป็นทศนิยมหรือเลขฐานสิบหก ... ):

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

โปรดทราบว่ามันจะส่งออกค่าไบต์ของทุกไบต์ในไฟล์ มันไม่มีส่วนเกี่ยวข้องกับ ASCII หรือชุดอักขระอื่น ๆ

หากไฟล์มี A ในชุดอักขระที่กำหนดและคุณต้องการดู 65 เพราะเป็นไบต์ที่ใช้สำหรับ A ใน ASCII คุณต้องทำดังนี้:

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

หากต้องการแปลงไฟล์นั้นเป็น ascii ก่อนให้ถ่ายโอนข้อมูลค่าไบต์ที่สอดคล้องกัน ตัวอย่างเช่นApple<LF>ใน EBCDIC-UK จะเป็น193 151 151 147 133 37( 301 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

hexdump, od, xxdหรือ$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 มอบให้กับสเตฟานเพียงเพราะคำตอบของเขาได้รับการแก้ไขและเขาเป็นคนแรก (โดยเพียงแค่ผม) แต่ทั้งคู่ก็ยอดเยี่ยม
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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.