• หากแบ่ง 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([) AND 00 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 ก็มีที่มาจาก โครงสร้างระดับบิตนี้

ยังไม่มีความคิดเห็น

ยังไม่มีความคิดเห็น