Cơ sở lập trình ngược: Mã hóa dữ liệu và biểu diễn ký tự

1. Bit và byte

Bit (bit) là đơn vị nhỏ nhất của dữ liệu trong hệ thống số, chỉ nhận một trong hai giá trị: 0 hoặc 1. Một dãy 8 bit tạo thành một byte. Vì vậy, giá trị lớn nhất có thể biểu diễn bằng một byte là 11111111 nhị phân — tương đương với 255 ở hệ thập phân.

Mỗi byte có khả năng lưu trữ chính xác một trong 256 giá trị khác nhau, từ 0 đến 255 (không dấu), hoặc từ −128 đến 127 (có dấu, dùng biểu diễn bù hai). Có thể hình dung byte như một ô nhớ gồm 8 vị trí riêng biệt, mỗi vị trí chứa đúng một bit.

2. Mã hóa ký tự

Hệ thống mã hóa ký tự phổ biến bao gồm ASCII và các chuẩn dựa trên Unicode như UTF-8, UTF-16, UTF-32.

ASCII sử dụng 7 bit để biểu diễn 128 ký tự cơ bản (chữ cái Latinh, chữ số, dấu câu và ký tự điều khiển). Mặc dù được định nghĩa trên 8 bit, bit cao nhất thường không được sử dụng — do đó ASCII hoàn toàn tương thích với byte đầu tiên của UTF-8.

Unicode mở rộng khái niệm này bằng cách gán cho mỗi ký tự một code point duy nhất, thường được viết dưới dạng U+XXXX, trong đó XXXX là số hexa 4 chữ số. Ví dụ: ký tự tiếng Trung "中" có code point U+4E2D.

Các sơ đồ mã hóa khác nhau chuyển code point thành chuỗi byte thực tế:

  • UTF-8: mã hóa biến độ dài (1–4 byte). Ký tự ASCII chiếm 1 byte; ký tự CJK như "中" chiếm 3 byte: 0xE4 0xB8 0xAD.
  • UTF-16: chủ yếu dùng 2 byte, nhưng ký tự ngoài vùng BMP (Basic Multilingual Plane) cần 4 byte (surrogate pair).
  • UTF-32: luôn dùng đúng 4 byte cho mọi ký tự — đơn giản nhưng tốn băng thông.

Ví dụ minh họa chuyển đổi:

// Ký tự 'A' (ASCII/UTF-8)
Hex: 0x41 → Binary: 0b01000001
// Giải thích: 4₁₆ = 0100₂, 1₁₆ = 0001₂ ⇒ ghép lại: 01000001
// Ký tự '中' (Unicode code point U+4E2D)
Hex: 0x4E2D → Binary: 0b0100111000101101 (16-bit, zero-padded)
// UTF-8 encoding:
Byte 1: 0b11100100 → 0xE4  
Byte 2: 0b10111000 → 0xB8  
Byte 3: 0b10101101 → 0xAD  
→ Dãy byte đầy đủ: 0xE4B8AD

3. Quy tắc chuyển đổi giữa các hệ cơ số

Mỗi nhóm 4 bit tương ứng với một chữ số hexa:

// Từ nhị phân sang hexa:
Binary: 1110 0100 → E    4 → 0xE4
// Từ hexa sang nhị phân:
0xE4 → 1110 (E) + 0100 (4) → 0b11100100

4. Quy ước tiền tố theo ngữ cảnh

Lĩnh vực Tiền tố/Hậu tố Ví dụ Ghi chú
Ngôn ngữ lập trình (C, Java, Python...) 0x 0x4E2D Chuẩn ISO/IEC cho số hexa
Unicode Standard U+ U+4E2D Chỉ định rõ đây là code point Unicode
Hợp ngữ (NASM, MASM) h (hậu tố) 4E2Dh Phổ biến trong môi trường x86
Nhị phân trong mã nguồn hiện đại 0b 0b01000001 Hỗ trợ từ C++14, Python 2.6+, Rust...
Hợp ngữ (một số biến thể) % (tiền tố) %1010 Dùng trong một số assembler như naken_asm

Các quy ước khác:

  • 0o755 hoặc 0755: số bát phân (octal)
  • 123: số thập phân (không tiền tố)
  • Trong HTML: 中 (hex) hoặc 中 (dec)
  • Trong CSS: \4E2D (không có 0x, tối đa 6 ký tự hex)
  • Trong XML: giống HTML — 中

Thẻ: Unicode utf8 ascii binary Hexadecimal

Đăng vào ngày 13 tháng 9 lúc 21:34