Encode / Decode Hex
Convert text sang hex và ngược lại. UTF-8 safe — hỗ trợ emoji, tiếng Việt, CJK. Tùy chỉnh separator và prefix 0x.
Hex Encode / Decode
Runs entirely in your browser. Your input never leaves your device.
What next?
How it works
Hex encoding thực sự là gì
Hex encoding (mã hóa thập lục phân) biến mỗi byte dữ liệu thành đúng hai ký tự hex (0–9, a–f). Vì một chữ số hex biểu diễn 4 bit (một nibble), hai chữ số hex bao phủ tất cả 256 giá trị có thể của một byte. Kết quả là một chuỗi ASCII có độ dài luôn bằng hai lần chuỗi byte gốc.
Đây không phải nén dữ liệu và không phải mã hóa bảo mật — đây thuần túy là định dạng hiển thị. Bất kỳ chuỗi hex nào cũng có thể decode ngược lại byte gốc mà không cần key hay secret.
Tại sao dùng hex thay vì decimal hay octal?
Máy tính lưu trữ dữ liệu dưới dạng nhị phân (cơ số 2). Hexadecimal (cơ số 16) là lũy thừa của 2, nên mỗi chữ số hex ánh xạ chính xác vào 4 bit nhị phân. Decimal không có sự căn chỉnh đó, đó là lý do lập trình viên dùng hex để kiểm tra raw bytes thay vì decimal. 0xFF nghĩa là 11111111 trong binary — liên hệ này rõ ràng ngay lập tức.
So sánh overhead: Hex vs Base64 vs Binary
| Format | Bytes → ký tự output | Overhead | |--------|----------------------|----------| | Hex | 1 byte → 2 ký tự | +100% | | Base64 | 3 bytes → 4 ký tự | +33% | | Binary | 1 byte → 8 ký tự | +700% |
Base64 thắng khi cần tối thiểu kích thước dữ liệu truyền tải (JWT, data URI, MIME). Hex thắng khi khả năng đọc và debug từng byte quan trọng hơn: hex dump cho phép nhìn thấy byte 0x00 null hay byte 0xFF sentinel ngay lập tức.
Các use case thực tế phổ biến
Memory dump và file dump. Debugger, hex editor (như xxd, hexdump -C), và crash dump tool đều output hex để developer kiểm tra raw memory từng byte. Prefix 0x (0x48 0x65 0x6c 0x6c 0x6f = Hello) là ngôn ngữ chung của lập trình low-level.
Mã màu CSS. Màu #ff6b6b là ba giá trị một byte: red=255, green=107, blue=107. Ký tự # thay thế prefix 0x. Developer web đọc hex color code hàng chục lần mỗi ngày.
Địa chỉ MAC. Hardware address Ethernet gồm sáu byte, thường viết dạng aa:bb:cc:dd:ee:ff với dấu hai chấm làm separator. Option Separator trong tool này cho phép tạo chính xác định dạng này.
Hash digest mật mã. SHA-256 output 32 bytes; SHA-512 output 64 bytes. Cả hai đều được hiển thị dưới dạng hex string — 64 hoặc 128 ký tự hex. Commit hash trong git như 4c1502f là bảy ký tự đầu của SHA-1 digest dạng hex.
Ethereum và blockchain. Transaction hash, địa chỉ ví, ABI-encoded calldata đều là hex — thường có prefix 0x. Checkbox 0x trong tool này bật/tắt prefix đó cho mỗi cặp byte.
Debug network protocol. Packet capture trong Wireshark hiển thị payload dạng hex. TCP flags trong packet header là một byte; giá trị hex 0x12 (SYN+ACK) dễ đọc hơn nhiều so với 00010010 binary hay 18 decimal.
Vấn đề với UTF-8
Khi gõ ký tự như é (U+00E9), text là hai byte UTF-8: 0xc3 0xa9. Nếu encode string đó sang hex mà kỳ vọng một byte mỗi ký tự, bạn nhận được bốn chữ số hex, không phải hai. Điều này đúng — é thực sự chiếm hai byte trong UTF-8.
Emoji như 😀 (U+1F600) là bốn byte UTF-8: 0xf0 0x9f 0x98 0x80 → tám chữ số hex. Tool này luôn xử lý input dạng UTF-8. Nếu hệ thống nguồn dùng encoding khác (Windows-1252, Latin-1), hãy convert sang UTF-8 trước.
Text thuần ASCII cho đúng hai chữ số hex mỗi ký tự vì mọi codepoint ASCII đều ≤127 và vừa một byte.
Quy ước prefix 0x
Prefix 0x xuất phát từ ngôn ngữ C (chuẩn hóa năm 1989 trong ANSI C / C89). Nó báo hiệu "literal này là hexadecimal" cho cả compiler và người đọc. Quy ước này lan sang hầu hết ngôn ngữ có cú pháp dựa trên C: C++, Java, JavaScript, Go, Rust, Python. Trong các ngữ cảnh mà cơ số đã ngầm định (mã màu, địa chỉ MAC, hash output), prefix bị bỏ và dùng separator hoặc quy ước độ dài thay thế.
Cấu hình tool
- Separator — để trống cho chuỗi hex liền (
48656c6c6f), dùng space cho kiểu hex dump (48 65 6c 6c 6f), dùng:cho kiểu MAC address, dùng\ncho một byte mỗi dòng. - 0x prefix — thêm
0xtrước mỗi cặp byte, hữu ích cho C array literal hoặc Ethereum input. - Case — chữ thường là quy ước cho hầu hết Unix tool và crypto output; chữ hoa phù hợp với
certutilcủa Windows và một số toolchain vi điều khiển.
Quyền riêng tư
Toàn bộ encode và decode chạy trong trình duyệt của bạn. Text hoặc hex string không bao giờ được gửi đến server, không bao giờ được log, và không bao giờ rời khỏi thiết bị của bạn.
Công cụ liên quan
- Base64 Encode/Decode — overhead thấp hơn (33%) để vận chuyển binary qua kênh text.
- Binary Encode/Decode — tám ký tự mỗi byte, hữu ích để hiểu từng vị trí bit.
- URL Encode/Decode — percent-encoding cho query parameter và URI component.
FAQ
Hex encoding có giống mã hóa bảo mật không?
Không. Hex encoding chỉ là định dạng hiển thị — nó chuyển mỗi byte thành hai ký tự ASCII có thể đọc được. Bất kỳ ai có chuỗi hex đều có thể decode ngay lập tức, không cần key. Nếu cần bảo mật, hãy mã hóa dữ liệu trước (AES, ChaCha20), rồi hex-encode ciphertext nếu cần dạng có thể in. Encoding và encryption là hai việc hoàn toàn khác nhau.
Tại sao ký tự của tôi tạo ra bốn chữ số hex thay vì hai?
Vì ký tự đó chiếm nhiều hơn một byte trong UTF-8. Chữ é (U+00E9) encode thành hai byte (0xc3 0xa9), tạo ra bốn chữ số hex. Emoji như 😀 (U+1F600) là bốn byte UTF-8 — tám chữ số hex. Ký tự ASCII (codepoint 0–127) luôn cho đúng hai chữ số hex vì vừa một byte. Đây là hành vi đúng, không phải bug.
Khi nào nên dùng hex thay vì Base64?
Chọn hex khi khả năng đọc ở mức byte quan trọng: debug memory dump, kiểm tra cryptographic hash, đọc packet capture, hoặc format địa chỉ MAC và Ethernet frame. Base64 tốt hơn khi cần tối thiểu kích thước — overhead chỉ 33% so với 100% của hex. Với hầu hết use case vận chuyển dữ liệu (data URI, JWT, MIME), Base64 là lựa chọn đúng; với kiểm tra raw bytes, hex thắng.
Prefix 0x có ý nghĩa gì?
Prefix 0x là quy ước từ C (chuẩn hóa trong ANSI C89) để đánh dấu một numeric literal là hexadecimal. Nó lan sang C++, Java, JavaScript, Go, Rust, và Python. Bạn sẽ thấy nó trong Ethereum address, C array literal, và debugger output. Trong các ngữ cảnh khác — màu CSS (#ff6b6b) hay MAC address (aa:bb:cc) — separator hoặc dấu phân cách khác thay thế cho prefix.
Dùng separator nào cho địa chỉ MAC?
Dùng : làm separator và chữ thường. Định dạng MAC address chuẩn là sáu cặp byte phân cách bằng dấu hai chấm: aa:bb:cc:dd:ee:ff. Một số tool networking cũ dùng - (kiểu Windows ipconfig: AA-BB-CC-DD-EE-FF). Bật chữ hoa nếu hệ thống đích yêu cầu. Bỏ prefix 0x — địa chỉ MAC không dùng nó.
Hex khác binary dump như thế nào?
Hex biểu diễn mỗi byte bằng hai ký tự (overhead 100%). Binary biểu diễn mỗi byte bằng tám ký tự (overhead 700%). Cả hai encode cùng thông tin. Binary hữu ích như công cụ học tập để thấy từng vị trí bit; hex là lựa chọn thực tế để kiểm tra dữ liệu thực vì đủ nhỏ gọn để quét bằng mắt. Một SHA-256 digest 32 byte là 64 ký tự hex nhưng 256 ký tự binary.
Tôi có thể round-trip text có ký tự non-ASCII không?
Có, miễn là cả hai phía đồng ý dùng UTF-8. Tool này encode input string sang byte UTF-8, rồi hex-encode các byte đó. Decode làm ngược lại: hex → bytes → UTF-8 string. Nếu hệ thống nhận interpret bytes theo Latin-1 hay Windows-1252, text decode sẽ khác. Hãy đảm bảo đồng thuận encoding ở cả hai đầu.
Tại sao một số hex output trông như 48 65 6c 6c 6f còn một số trông như 48656c6c6f?
Điểm khác biệt duy nhất là separator. Space giữa mỗi cặp byte là style dùng bởi xxd, hexdump, và Wireshark — cải thiện khả năng đọc với chuỗi byte dài. Không có separator tạo ra chuỗi hex gọn thường dùng trong hash digest, Ethereum address, và URL encoding. Tool này cho phép bạn chọn: để trống cho gọn, space cho dump style, : cho MAC/IPv6 style.