Văn bản sang hệ bát phân
Mã hóa từng ký tự văn bản thành chuỗi mã bát phân tương ứng.
Hệ bát phân hiếm khi đóng vai trò là bảng mã chính trong các ứng dụng hiện đại, nhưng cú pháp escape sequence bát phân vẫn hiện diện bền bỉ trong ngôn ngữ C cùng shell POSIX suốt nhiều thập kỷ.
Cấu trúc escape sequence bát phân trong văn bản
Trong cú pháp ngôn ngữ C cũng như shell POSIX, một ký tự escape đi kèm tối đa ba chữ số bát phân biểu diễn trực tiếp giá trị của một byte duy nhất. Khi viết chuỗi chứa dãy số 102 theo định dạng này, hệ thống sẽ hiểu đó là ký tự B — bởi vì giá trị bát phân 102 tương đương (1 × 64) + (0 × 8) + 2 = 66, và giá trị thập phân 66 chính là ký tự B trong chuẩn ASCII.
Quy ước biểu diễn này ra đời từ những bản C đầu tiên vào những năm 1970, thời điểm mà hệ bát phân là phương thức tư duy trực tiếp và thông dụng của các lập trình viên trên phần cứng thời bấy giờ.
Lý do hệ thập lục phân thay thế bát phân
Một mã escape hệ thập lục phân cần đúng hai chữ số để bao trọn mọi byte từ 00 đến FF. Trong khi đó, định dạng bát phân có thể cần tới ba chữ số, đồng thời dễ gây nhầm lẫn khi vô tình gộp chữ số văn bản đứng ngay sau nếu không được đệm đủ độ dài cố định.
Hệ thập lục phân khớp tự nhiên với cấu trúc byte, giúp việc đọc và quản lý bộ nhớ thuận tiện hơn. Vì vậy, các tiêu chuẩn viết mã hiện đại hầu như đều khuyến khích dùng thập lục phân hoặc unicode escape thay cho bát phân.
Các bước chuyển đổi văn bản sang bát phân
- Tách đoạn văn bản cần xử lý theo từng ký tự riêng biệt.
- Tra cứu mã thập phân ASCII tương ứng cho từng ký tự đó.
- Chuyển giá trị thập phân sang hệ bát phân bằng phép chia liên tiếp cho 8 và ghi lại các số dư theo thứ tự ngược.
- Đệm thêm chữ số 0 phía trước để đủ ba chữ số nếu bạn muốn tạo chuỗi escape chuẩn.
- Dán nội dung vào công cụ rồi nhấn nút chuyển đổi để nhận kết quả ngay sau khi xác nhận captcha.
Trường hợp thực tế cần đọc mã bát phân
- Phân tích mã nguồn C hoặc C++ cổ điển được viết trước khi hệ thập lục phân trở nên phổ biến.
- Làm việc với kịch bản shell POSIX dùng lệnh printf kèm định dạng %o để xuất số liệu.
- Nghiên cứu tài liệu kỹ thuật của các hệ thống nhúng lâu năm giữ nguyên quy ước cũ.
- Đọc tài liệu tra cứu Unix hoặc các định dạng tập tin cổ chưa từng nâng cấp sang chuẩn mới.
Câu hỏi thường gặp về chuyển đổi văn bản sang bát phân
Định dạng tập tin nào còn lưu trữ dữ liệu dưới dạng bát phân?
Ít có tập tin nào dùng bát phân cho toàn bộ văn bản, nhưng tiêu đề kho lưu trữ tar chuẩn POSIX vẫn lưu một số trường dữ liệu, chẳng hạn kích thước tệp, bằng chuỗi số bát phân.
Một byte dữ liệu cần bao nhiêu chữ số bát phân để biểu diễn?
Cần tối đa ba chữ số, vì ba chữ số bát phân bao trùm dải từ 0 đến 511, thừa đủ cho khoảng giá trị 0 đến 255 của một byte với chữ số đầu tiên chỉ nằm trong khoảng 0 đến 3.
Tại sao mã nguồn lại dùng escape sequence bát phân thay vì gõ thẳng ký tự?
Cách này thường dùng để đại diện cho ký tự điều khiển không hiển thị được, hoặc các ký tự mà bàn phím không hỗ trợ nhập trực tiếp mà không lo sai lệch giá trị byte.
Quy tắc escape sequence bát phân có giống hệt nhau ở mọi ngôn ngữ không?
Ý tưởng cốt lõi tương đồng, nhưng số lượng chữ số tối đa cho phép và cách ngắt chuỗi có thể khác đôi chút giữa C, shell POSIX và các môi trường khác, do đó bạn nên xem lại tài liệu cụ thể.
Có nên tiếp tục viết mã escape bát phân trong dự án mới không?
Nên ưu tiên thập lục phân trong phần lớn trường hợp vì tính gọn gàng, khớp với ranh giới byte và phù hợp với tiêu chuẩn lập trình thông dụng.