Công cụ chuyển văn bản sang bát phân và bát phân sang văn bản

Viết mỗi byte của văn bản thành một số bát phân ba chữ số, hoặc chuyển danh sách giá trị byte bát phân trở lại thành văn bản đọc được. Hỗ trợ UTF-8 và nhiều bộ ký tự cũ.

Chạy hoàn toàn trong trình duyệt của bạn. Không có gì được tải lên.

Cách sử dụng

  1. Chọn Mã hóa để chuyển văn bản sang bát phân, hoặc Giải mã để chuyển các giá trị bát phân trở lại thành văn bản.
  2. Nhập hoặc dán dữ liệu đầu vào, hoặc mở một tệp để chuyển đổi các byte của tệp.
  3. Chọn dấu phân cách cho đầu ra: Dấu cách, Không, Dấu phẩy hoặc Xuống dòng.
  4. Sao chép kết quả hoặc tải xuống dưới dạng tệp.

Hệ bát phân là gì?

Hệ bát phân, hay Base8, biểu diễn số bằng các chữ số từ 0 đến 7. Mỗi chữ số bát phân tương ứng đúng ba bit, vì vậy hệ bát phân từng phổ biến trên các máy tính đời đầu có độ dài từ máy là bội số của ba, như PDP-8 12 bit và PDP-10 36 bit. Ngày nay nó chủ yếu chỉ còn xuất hiện trong các chuỗi thoát và quyền tệp trên Unix.

Một byte chứa giá trị từ 0 đến 255, tức từ 0 đến 377 trong hệ bát phân. Công cụ này viết mỗi byte đầu vào thành đúng ba chữ số bát phân kèm các số 0 ở đầu, nhờ đó mọi nhóm có cùng độ rộng và thậm chí có thể ghép liền nhau mà không cần dấu phân cách. Văn bản trước tiên được chuyển thành byte theo bảng mã đã chọn: mỗi ký tự một byte với ASCII thuần, từ hai đến bốn byte mỗi ký tự với các hệ chữ viết khác trong UTF-8.

Chuỗi thoát bát phân

C, C++, Python, Perl và lệnh printf của shell cho phép viết một byte bằng dấu gạch chéo ngược theo sau là tối đa ba chữ số bát phân: \101 là chữ A và \012 là ký tự xuống dòng (line feed).

Công cụ này xuất ra các chữ số thuần, không có dấu gạch chéo ngược. Để tạo một chuỗi đã thoát, hãy lấy đầu ra phân tách bằng dấu cách, thay mỗi dấu cách bằng một dấu gạch chéo ngược và thêm một dấu nữa trước nhóm đầu tiên. Để giải mã chuỗi thoát, hãy làm ngược lại và thay các dấu gạch chéo ngược bằng dấu cách, vì bộ giải mã chỉ chấp nhận chữ số và dấu phân cách.

Quyền tệp như 755 cũng là số bát phân, nhưng đó là số chứ không phải văn bản. Để chuyển một số như vậy sang nhị phân hoặc thập phân, hãy dùng công cụ chuyển đổi cơ số.

Bát phân trong mã nguồn

# Python
' '.join(f'{b:03o}' for b in 'Hi'.encode())            # '110 151'
bytes(int(o, 8) for o in '110 151'.split()).decode()   # 'Hi'

# Shell
printf '\110\151\n'        # in ra Hi
printf 'Hi' | od -An -to1   # 110 151

Đặc tả

Bảng ký tự0-7
Kích thước đầu ra3 chữ số cho mỗi byte (300%)
Phần đệmKhông có
Tiêu chuẩnBiểu diễn bát phân theo vị trí
Phân biệt hoa thườngKhông

Ví dụ

Đầu vào (UTF-8)Đầu ra
Hello, World!110 145 154 154 157 054 040 127 157 162 154 144 041
Base64.is102 141 163 145 066 064 056 151 163
你好344 275 240 345 245 275

Câu hỏi thường gặp

Vì sao mỗi byte có ba chữ số bát phân?

Giá trị byte lớn nhất, 255, là 377 trong hệ bát phân, nên ba chữ số luôn là đủ. Việc đệm số 0 ở đầu cho các giá trị nhỏ hơn giúp mọi nhóm có cùng độ rộng, và nhờ vậy một chuỗi không có dấu phân cách vẫn có thể được tách lại thành từng byte.

Làm sao giải mã chuỗi bát phân không có dấu cách?

Hãy dán các chữ số thành một chuỗi liền mạch. Bộ giải mã chia chuỗi thành từng nhóm ba chữ số, nên độ dài phải là bội số của 3. Nếu có giá trị ít hơn ba chữ số, hãy phân tách chúng bằng dấu cách, dấu phẩy hoặc xuống dòng.

Vì sao giá trị như 400 bị từ chối?

Số bát phân 400 bằng 256, không vừa trong một byte. Giá trị byte hợp lệ nằm trong khoảng từ 0 đến 377, và bộ giải mã báo vị trí của mọi nhóm nằm ngoài khoảng đó. Các chữ số 8 và 9 hoàn toàn không phải chữ số bát phân hợp lệ.

Có thể lấy giá trị bát phân theo một bộ ký tự khác không?

Có. Hãy chọn bộ ký tự đó trong menu Bảng mã, ví dụ Windows-1252 hoặc ISO-8859-1 để mỗi ký tự Tây Âu là một byte, hoặc GBK hay Shift_JIS cho văn bản tiếng Trung và tiếng Nhật.