ตาราง ASCII แบบ 4 คอลัมน์ (2017)
(garbagecollected.org)- หากแบ่ง ASCII ออกเป็น 7 บิต โดยแยกเป็น 2 บิตบนสุด (กลุ่ม) และ 5 บิตล่าง (ค่า) แล้วจัดวางเป็นตาราง 4 คอลัมน์ ความสัมพันธ์ระหว่างอักขระควบคุมกับอักขระที่แสดงผลจะปรากฏให้เห็นทันที
- ปุ่ม
CTRLทำงานโดยทำให้บิตบนสุดของอักขระที่ป้อนเป็น 0 จึงสร้าง อักขระควบคุม (control character) ที่ใช้ 5 บิตล่างร่วมกัน - ตัวอย่างเช่น เมื่อกด
CTRLกับ[(10 11011) จะได้ESC(00 11011) ซึ่งอธิบายได้ด้วย การดำเนินการบิต AND - เหตุผลที่
^Jคือขึ้นบรรทัดใหม่,^Hคือแบ็กสเปซ,^Iคือแท็บ รวมถึงการแสดง^M(CR) ในไฟล์ข้อความของ Windows ก็เป็นหลักการเดียวกัน - ตาราง ASCII แบบทั่วไปมักซ่อนแพตเทิร์นนี้ไว้ แต่ถ้า แบ่งคอลัมน์ละ 32 ตัว จะเห็นเจตนาของการออกแบบได้ชัดเจน
การค้นพบตาราง ASCII แบบ 4 คอลัมน์
- ผู้ใช้ Hacker News ชื่อ soneil ได้โพสต์ เวอร์ชันของตาราง ASCII ที่ จัดวางเป็น 4 คอลัมน์ ชุดละ 32 ตัว
- จากการจัดวางนี้ จะเห็นได้ทันทีว่าการสลับตัวพิมพ์ใหญ่และตัวพิมพ์เล็กต่างกันเพียง บิตเดียว และตัวอักษรเรียงตามรูปแบบ
40h + ค่าลำดับ(ตัวพิมพ์เล็กคือ60h) - ตารางนี้ยังทำให้เห็นได้ทันทีด้วยว่าเหตุใด
^\[จึงเป็น ESC
โครงสร้างการเข้ารหัส ASCII แบบ 7 บิต
- ASCII เป็น การเข้ารหัสแบบ 7 บิต โดย 2 บิตแรกแทน 4 กลุ่ม และ 5 บิตหลังแทนค่าได้ 32 ค่า
- กลุ่ม
00: อักขระควบคุม (NUL, SOH, STX, ESC ฯลฯ) - กลุ่ม
01: อักขระพิเศษและตัวเลข (Spc, !, ", # ฯลฯ) - กลุ่ม
10: ตัวอักษรพิมพ์ใหญ่ (@, A, B, C ฯลฯ) - กลุ่ม
11: ตัวอักษรพิมพ์เล็ก (`, a, b, c ฯลฯ)
- กลุ่ม
- อักขระที่อยู่ในแถวเดียวกันจะมี 5 บิตล่างเหมือนกัน และต่างกันแค่บิตของกลุ่ม
ตาราง ASCII แบบ 4 คอลัมน์
| บิต | 00 (ควบคุม) | 01 (พิเศษ/ตัวเลข) | 10 (พิมพ์ใหญ่) | 11 (พิมพ์เล็ก) |
|---|---|---|---|---|
| 00000 | NUL | Spc | @ | ` |
| 00001 | SOH | ! | A | a |
| 00010 | STX | " | B | b |
| 00011 | ETX | # | C | c |
| 00100 | EOT | $ | D | d |
| 00101 | ENQ | % | E | e |
| 00110 | ACK | & | F | f |
| 00111 | BEL | ' | G | g |
| 01000 | BS | ( | H | h |
| 01001 | TAB | ) | I | i |
| 01010 | LF | * | J | j |
| 01011 | VT | + | K | k |
| 01100 | FF | , | L | l |
| 01101 | CR | - | M | m |
| 01110 | SO | . | N | n |
| 01111 | SI | / | O | o |
| 10000 | DLE | 0 | P | p |
| 10001 | DC1 | 1 | Q | q |
| 10010 | DC2 | 2 | R | r |
| 10011 | DC3 | 3 | S | s |
| 10100 | DC4 | 4 | T | t |
| 10101 | NAK | 5 | U | u |
| 10110 | SYN | 6 | V | v |
| 10111 | ETB | 7 | W | w |
| 11000 | CAN | 8 | X | x |
| 11001 | EM | 9 | Y | y |
| 11010 | SUB | : | Z | z |
| 11011 | ESC | ; | [ | { |
| 11100 | FS | < | \ | | |
| 11101 | GS | = | ] | } |
| 11110 | RS | > | ^ | ~ |
| 11111 | US | ? | _ | DEL |
หลักการทำงานของปุ่ม CTRL
- เมื่อกดปุ่ม
CTRLบิตบนสุดของอักขระที่ป้อนจะถูกตั้งค่าเป็น 0 ทั้งหมด ทำให้อักขระย้ายไปอยู่ในกลุ่มอักขระควบคุม (00) - สามารถเขียนเป็น การดำเนินการบิต AND ได้ดังนี้:
10 11011([) AND00 11111(CTRL) =00 11011(ESC)
- ดังนั้นการที่
CTRL+[สร้าง ESC จึงไม่ใช่การกำหนดแบบสุ่ม แต่เป็น การออกแบบที่อิงกับการดำเนินการระดับบิต
ตัวอย่างการใช้งานจริง
^J(CTRL+J) คือ LF(ขึ้นบรรทัดใหม่),^H(CTRL+H) คือ BS(แบ็กสเปซ),^I(CTRL+I) คือ TAB- หากดูไฟล์ข้อความของ Windows ด้วย
cat -Aจะเห็น^Mปรากฏอยู่ ซึ่งเป็นเพราะการขึ้นบรรทัดใหม่ของ Windows ใช้รูปแบบ CR+LF - การที่ผู้ใช้ vim มักใช้
CTRL+[บนเทอร์มินัลแทน ESC ก็มีที่มาจาก โครงสร้างระดับบิตนี้
ยังไม่มีความคิดเห็น