Encode / Decode Binary

Convert text sang binary 8-bit và ngược lại. UTF-8 safe. Tùy chỉnh separator.

encoding

Binary Encode / Decode

Output

Runs entirely in your browser. Your input never leaves your device.

What next?

How it works

Binary encoding thực sự là gì

Binary encoding chuyển mỗi byte dữ liệu thành chuỗi tám ký tự nhị phân (01). Ký tự A (ASCII 65) trở thành 01000001. Byte 0xFF trở thành 11111111. Output là một chuỗi ASCII có độ dài bằng tám lần chuỗi byte gốc.

Đây không phải nén dữ liệu, không phải mã hóa bảo mật, và hầu như không được dùng trong production. Đây chủ yếu là công cụ học tập và debug — cách minh bạch nhất có thể để kiểm tra những bit thực sự nằm bên trong một byte.

Tại sao 8 bit trở thành một byte

Byte 8-bit không phải là điều hiển nhiên ngay từ đầu. Máy tính đời đầu dùng word 6-bit, 7-bit, 9-bit, thậm chí 36-bit tùy kiến trúc. IBM System/360 (1964) phổ biến hóa byte 8-bit, và chuẩn ASCII (1963, sửa đổi 1967) củng cố ký tự 7-bit làm nền tảng cho text. Bit thứ tám ban đầu dùng cho parity checking, sau đó cho extended character set (Latin-1 / ISO 8859-1), và cuối cùng trở thành nền tảng của UTF-8.

Đầu những năm 1980, byte 8-bit đã thắng: Intel 8080, Motorola 6800, MOS 6502 (trong Apple II và NES) — tất cả đều 8-bit. Chuẩn IEEE 1003.1 (POSIX) chính thức định nghĩa CHAR_BIT = 8 năm 1988. Ngày nay giả định này phổ biến đến mức "byte" và "octet" được dùng hoán đổi, dù "octet" (RFC 791) ban đầu được chọn chính xác để tránh sự mơ hồ.

Hiểu bitwise operation bằng cách nhìn trực tiếp

Binary text là cách nhanh nhất để hiểu các toán tử bitwise làm gì:

  A  = 01000001
  B  = 01000010
A & B = 01000000   (AND: cả hai bit phải là 1)
A | B = 01000011   (OR: một trong hai bit là 1)
A ^ B = 00000011   (XOR: hai bit khác nhau)
 ~A   = 10111110   (NOT: đảo mọi bit)
A << 1= 10000010   (dịch trái 1 = nhân 2)
A >> 1= 00100000   (dịch phải 1 = chia 2)

Nhìn thấy trực tiếp vị trí bit loại bỏ việc đoán mò. Đây là lý do các khóa học khoa học máy tính dạy bit manipulation thường yêu cầu sinh viên viết ra biểu diễn binary bằng tay trước khi chạy code.

Debug network protocol

Các protocol thường đóng gói nhiều flag hoặc giá trị nhỏ vào một byte. TCP header có trường flags 9-bit trong đó từng bit báo hiệu SYN, ACK, FIN, RST, PSH, URG, ECE, CWR, và NS. Khi packet capture cho thấy byte flags TCP là 0x12, chuyển sang binary — 00010010 — ngay lập tức cho thấy bit 1 và 4 được set: SYN và ACK.

Tương tự, các packed structure trong embedded system (MQTT connect flags, I²C register bitmask, CAN bus data frame) dễ đọc nhất ở dạng binary. Một byte duy nhất điều khiển tám tín hiệu phần cứng độc lập thì không thể hiểu dưới dạng decimal 147, nhưng có thể đọc ngay dưới dạng 10010011.

DNS, IP header (version + IHL đóng gói trong một byte), IPv4 ToS/DSCP field, và USB descriptor flag đều dùng bit-packed byte. Binary encoding cho phép đọc trực tiếp mà không cần tính lũy thừa của 2.

Ký tự UTF-8 multi-byte

Với text ASCII (codepoint 0–127), mỗi ký tự là một byte, nên binary encoding tạo ra tám ký tự mỗi ký tự input. Với mọi thứ ngoài ASCII, UTF-8 dùng nhiều byte:

| Ký tự | Codepoint | Bytes UTF-8 | Độ dài binary output | |-------|-----------|-------------|----------------------| | A | U+0041 | 1 byte | 8 ký tự | | é | U+00E9 | 2 bytes | 16 ký tự | | | U+4E2D | 3 bytes | 24 ký tự | | 😀 | U+1F600 | 4 bytes | 32 ký tự |

Đây là hành vi đúng và mong đợi. Nếu encode 😀 và nhận được chuỗi binary 32 ký tự, tool đang hoạt động đúng. Bốn byte 11110000 10011111 10011000 10000000 encode biểu diễn UTF-8 của emoji.

Cấu trúc byte UTF-8: Các bit đầu của mỗi byte cho decoder biết bao nhiêu byte thuộc codepoint này. 0xxxxxxx là ký tự ASCII một byte. 110xxxxx bắt đầu chuỗi hai byte. 1110xxxx bắt đầu ba byte. 11110xxx bắt đầu bốn byte. Continuation byte luôn bắt đầu bằng 10xxxxxx. Nhìn thấy điều này trong binary làm cho encoding trở nên rõ ràng ngay lập tức.

Khi nào thực sự hữu ích?

Môi trường học tập. Các khóa học khoa học máy tính, coding bootcamp, và tự học — bất cứ đâu một người học đang cố gắng xây dựng intuition về binary arithmetic, ASCII table, hoặc character encoding.

Debug bit manipulation. Khi viết bitmask và kết quả sai, dán bytes vào binary viewer ngay lập tức cho thấy bit nào đang được set hoặc cleared không đúng.

CTF (Capture The Flag) challenge. Binary-encoded message xuất hiện thường xuyên trong các thử thách cấp độ beginner. Dán chuỗi binary và decode sang text là bước đầu tiên phổ biến.

Đặc tả protocol. Khi soạn thảo hoặc review một RFC, spec protocol riêng, hoặc mô tả hardware interface: hiển thị bit layout dạng binary bên cạnh C struct definition rõ ràng hơn bảng giá trị hex.

Use case production (hiếm nhưng có thực)

Binary encoding hầu như không bao giờ được dùng như serialisation format trong production vì overhead 700%. Ngoại lệ chính là binary literal dễ đọc trong source code:

flags = 0b10010011   # Python binary literal
mask  = 0b00001111   # lower nibble mask
const flags = 0b10010011;  // JavaScript binary literal (ES2015+)

Đây là số nhị phân trong source code, không phải binary-encoded string — nhưng chúng dựa trên cùng mental model mà tool này luyện tập.

Quyền riêng tư

Toàn bộ encode và decode chạy trong trình duyệt của bạn. Text không bao giờ được gửi đến server.

Công cụ liên quan

  • Hex Encode/Decode — hai ký tự mỗi byte (overhead 100%), lựa chọn thực tế để kiểm tra raw bytes.
  • Base64 Encode/Decode — bốn ký tự cho ba bytes (overhead 33%), chuẩn để vận chuyển binary qua kênh text.

FAQ

Binary encoding có được dùng trong production không?

Hiếm khi dùng như serialisation format, vì overhead lên đến 700% — một byte thành tám ký tự. Nơi nó xuất hiện trong production là binary literal trong source code (0b10010011 trong Python hay JavaScript) và trong tài liệu protocol khi mô tả bit-field layout. Như transport format, nó không có lợi thế thực tế nào so với hex (100% overhead) hay Base64 (33% overhead). Hãy coi tool này là công cụ học tập và debugger, không phải lựa chọn vận chuyển dữ liệu.

Tại sao emoji của tôi tạo ra 32 ký tự binary?

Vì emoji chiếm bốn byte trong UTF-8. Binary encoding chuyển mỗi byte thành tám ký tự binary, nên bốn byte tạo ra 32 ký tự. Ví dụ, 😀 (U+1F600) encode thành 11110000 10011111 10011000 10000000 — bốn byte UTF-8 hiển thị thành bốn nhóm tám ký tự. Đây là hành vi đúng; tool đang hiển thị cấu trúc byte UTF-8 thực tế của ký tự.

Pattern bit đầu tiên cho tôi biết gì về byte UTF-8?

UTF-8 encode số lượng byte trong các bit đầu: 0xxxxxxx là ký tự ASCII một byte; 110xxxxx bắt đầu chuỗi hai byte; 1110xxxx bắt đầu ba byte; 11110xxx bắt đầu bốn byte. Continuation byte luôn bắt đầu với 10xxxxxx. Khi nhìn binary dump của chuỗi multi-byte, các prefix này giúp xác định byte boundary và codepoint width mà không cần tra bảng.

Làm thế nào dùng tool này để hiểu bitmask?

Encode giá trị byte bạn đang làm việc và mask riêng lẻ, rồi so sánh chúng trực quan. Ví dụ, byte TCP flags 0x1200010010 — bit 1 và 4 được set, tương ứng SYN và ACK. Mask 0x0F00001111 — nó cô lập lower nibble. Nhìn cả hai dưới dạng chuỗi binary tám ký tự làm cho các phép toán AND, OR, và XOR trở nên tự giải thích mà không cần tính lũy thừa của 2.

Tại sao một byte luôn là 8 bit?

Không phải lúc nào cũng vậy. Máy tính đời đầu dùng word 6, 7, 9, thậm chí 36-bit. Byte 8-bit được phổ biến bởi IBM System/360 năm 1964 và được pháp điển hóa bởi chuẩn ASCII. Đầu những năm 1980, vi xử lý 8-bit (Intel 8080, MOS 6502) đã làm nó trở nên phổ quát. POSIX chính thức hóa CHAR_BIT = 8 năm 1988. Ngày nay giả định này đã ăn sâu đến mức RFC mạng dùng "octet" thay vì "byte" để chính xác — dù không còn sự mơ hồ nào trong thực tế.

Tôi có thể decode chuỗi binary tùy ý không phải UTF-8 hợp lệ không?

Decoder sẽ cố gắng interpret các bit binary thành bytes rồi decode bytes đó theo UTF-8. Nếu chuỗi byte không phải UTF-8 hợp lệ, bạn sẽ thấy replacement character (``) hoặc output rác. Binary encoding và decoding của text chỉ có ý nghĩa khi các byte biểu diễn một string encoding hợp lệ. Với raw binary data (hình ảnh, executable), hex là công cụ phù hợp hơn.

Separator giữa các nhóm byte có bắt buộc không?

Không. Separator (space, newline, hoặc dấu phân cách bất kỳ) chỉ mang tính thẩm mỹ — nó nhóm các chunk tám ký tự để dễ đọc nhưng không chứa thông tin. Khi decode, tool này strip whitespace và split trên ký tự non-binary, nên 01000001 010000100100000101000010 đều decode thành AB. Dùng space separator khi tự đọc output; bỏ separator khi truyền chuỗi binary giữa các chương trình.