Nền tảng

Hex, byte và token: hiểu bằng một ví dụ ngắn

Tách mã số khỏi ký hiệu hiển thị, biết cách đếm byte và kiểm tra một chuỗi Hex.

Trước khi nhìn một chuỗi dài như A0 D1 A2 1F 01, hãy tách ba câu hỏi: chuỗi đang biểu diễn số gì, có bao nhiêu đơn vị dữ liệu, và máy sẽ hiểu dữ liệu đó theo cách nào. Trả lời từng câu dễ hơn nhiều so với cố ghi nhớ cả chuỗi.

Hex là cách viết số

Hệ thập phân dùng mười chữ số từ 0 đến 9. Hệ thập lục phân, thường gọi là Hex, dùng thêm A, B, C, D, E, F để biểu diễn các giá trị 10, 11, 12, 13, 14, 15. Vì vậy, 1F có giá trị thập phân là 1 × 16 + 15 = 31. Nó không phải chữ “một ép”.

Một chữ số Hex biểu diễn bốn bit; hai chữ số biểu diễn tám bit, tức một byte. Vì thế khoảng từ 00 đến FF có 256 giá trị. Số 0 đứng đầu rất hữu ích khi viết theo từng byte: 01 vẫn thể hiện rõ một nhóm hai chữ số, trong khi 1 dễ bị dính với nhóm kế tiếp.

HexThập phânCách tính
0A100 × 16 + 10
10161 × 16 + 0
1F311 × 16 + 15
A016010 × 16 + 0
FF25515 × 16 + 15

Đếm dữ liệu trước khi nhập

Chuỗi A0 D1 A2 1F 01 có năm nhóm, mỗi nhóm hai chữ số Hex, nên biểu diễn năm byte. Nếu bỏ khoảng trắng thành A0D1A21F01, chuỗi vẫn có mười chữ số và năm byte. Nhưng A0D1A21F0 chỉ còn chín chữ số: không thể chia đủ thành các cặp mà không có phần dư.

Ví dụ này chỉ giải thích cách đếm một chuỗi Hex thuần. Trong tài liệu thủ thuật, ký hiệu @, dấu chấm hoặc tên hàm có thể thuộc một quy ước khác. Đừng áp dụng cách đếm cặp Hex cho mọi dòng hướng dẫn rồi kết luận tài liệu sai.

Token là cách máy diễn giải

Một token có thể đại diện cho hàm hoặc thành phần biểu thức. Chữ ln( xuất hiện trên màn hình không có nghĩa là cần bấm ba ký tự chữ l, chữ n và dấu ngoặc như soạn tin nhắn. Phải phân biệt hình thức hiển thị với thao tác nhập hàm trên máy.

Tương tự, một giá trị byte không tự mang ý nghĩa phổ quát. Trong một bảng nó có thể liên hệ với ký tự; ở ngữ cảnh khác nó có thể là dữ liệu được phương pháp thực hành xử lý. Đó là lý do cần đi kèm đúng model, đúng bảng mã và đúng bước chuẩn bị.

Bài tập nhỏ

Hãy đếm chuỗi 00 10 FF 01: có bốn byte, không phải tám. Giá trị của nhóm 10 là 16 trong hệ thập phân. Nếu bạn đọc thành mười thì đã lẫn hệ cơ số; nếu đếm thành tám byte thì đã lẫn chữ số Hex với byte.

Khi ghi chép, chia chuỗi thành từng cặp, dùng phông đơn cách và giữ một bản gốc cạnh bản đang nhập. Nếu kết quả sai, so từng nhóm từ trái sang phải; đừng sửa đồng thời nhiều vị trí vì sẽ mất dấu nguyên nhân.

Nguồn & phạm vi

Bài giải thích khái niệm cơ sở; chuỗi ví dụ A0 D1 A2 1F 01 lấy từ dòng A của mục D8A0 trong quick++.pdf.

Mở tài liệu gốc →

Phát hiện điểm chưa rõ? Gửi góp ý kèm tên bài và vị trí cần sửa.

Đọc tiếp