Skip to content

Lab: Trace One Byte

คุณจะตามรอย character ตัวเดียว ขณะมันเดินทางผ่าน Google Sheets, C, Python, และ SQL

เวลาที่ใช้: ~25 นาที

  1. Google Sheets

    ในเซลล์ A1 พิมพ์ตัวอักษร A แล้วทำ:

    • =CODE(A1) → ได้เลขอะไร?
    • =DEC2BIN(CODE(A1)) → ได้ binary pattern อะไร?
    • =LEN(A1) vs =LENB(A1) — เท่ากันไหม?

    ตอนนี้ลองพิมพ์ ในเซลล์ A2 แล้วทำสูตรเดิม — อะไรเปลี่ยน?

  2. C (online compiler — onlinegdb.com, replit.com)

    #include <stdio.h>
    int main() {
    char a = 'A';
    printf("as number: %d\n", a);
    printf("as char: %c\n", a);
    printf("size: %zu byte\n", sizeof(a));
    return 0;
    }

    รันแล้วดู: ตัวเลขตรงกับที่ Sheets ให้มาไหม?

  3. Python (notebook หรือ Pyodide)

    ord('A') # ?
    bin(ord('A')) # ?
    len('A'.encode()) # ?
    len(''.encode()) # ?

    ผลลัพธ์เหมือน Sheets ไหม?

  4. SQL (sandbox ใดก็ได้)

    CREATE TABLE t (c CHAR(5));
    INSERT INTO t VALUES ('HI');
    SELECT c, LENGTH(c) FROM t;

    ทำไม LENGTH ได้ 5 ไม่ใช่ 2?

  5. Reflect

    เขียนประโยค 1 ประโยค อธิบายสิ่งที่คุณรู้ตอนนี้ที่ไม่รู้เมื่อชั่วโมงก่อน

    Bonus: เชื่อมโยงผลลัพธ์ sizeof ของ C กับพฤติกรรม padding ของ CHAR(n) ใน SQL

ดูเฉลย

Google Sheets:

  • =CODE("A")65
  • =DEC2BIN(CODE("A"))1000001
  • =LEN("A")1, =LENB("A")1 (เท่ากันเพราะ A เป็น ASCII 1 byte)
  • =LEN("ก")1, =LENB("ก")3 (ต่างกัน! ก ใช้ 3 bytes ใน UTF-8)

C:

  • as number: 65 — ตรงกับ Sheets!
  • as char: A
  • size: 1 byte

Python:

  • ord('A')65 (ตรงกัน!)
  • bin(ord('A'))'0b1000001'
  • len('A'.encode())1
  • len('ก'.encode())3 (ตรงกับ Sheets LENB)

SQL:

  • LENGTH ได้ 5 เพราะ CHAR(5) เติม trailing spaces ให้ 'HI' กลายเป็น 'HI ' — เหมือน C ที่ char fixed[5] จองพื้นที่ 5 bytes เสมอ

Bonus: sizeof(char) = 1 byte ใน C → CHAR(5) = 5 bytes เสมอ ไม่ว่าจะเก็บข้อความสั้นแค่ไหน — ที่เหลือเติม space (ใน SQL) หรือเป็น garbage (ใน C)