Mã hóa hex hoạt động như thế nào
Mỗi ký tự trên trang được lưu dưới dạng một hoặc nhiều byte. Mã hóa hex viết lại các byte đó trong hệ cơ số 16, hai ký tự mỗi byte, để luồng byte có thể đọc được mà không cần công cụ đặc biệt.
- Mã hóa văn bản thành byte. Chế độ UTF-8 chạy đầu vào qua
new TextEncoder().encode(text), trả về mộtUint8Arraygiá trị byte. Chế độ Latin-1 lấy tám bit thấp của mỗi đơn vị mã quacharCodeAt(0) & 0xFF, đây là phép chuyển đổi mà các bộ mã ISO-8859-1 kế thừa thực hiện. - Hiển thị mỗi byte thành hai chữ số hex. Mỗi byte ánh xạ sang hai chữ số hex qua
byte.toString(16).padStart(2, "0"). Nút chuyển kiểu chữ chọn chữ hoa (A-F) hoặc chữ thường (a-f) cho các chữ cái đầu ra. - Áp dụng nhóm và tiền tố. Nhóm chèn dấu phân cách giữa các byte: một dấu cách, một gạch ngang, hoặc một dấu cách mỗi bốn byte. Tiền tố 0x có thể được thêm vào một lần cho toàn chuỗi (chế độ Không nhóm) hoặc theo từng byte (chế độ Cách), phù hợp với quy ước mà mảng C và công cụ diff nhị phân sử dụng.
- Giải mã ngược lại. Chế độ Hex → Văn bản loại bỏ mọi dấu cách, gạch ngang và tiền tố
0xkhỏi đầu vào, xác nhận các ký tự còn lại với/^[0-9a-fA-F]+$/, từ chối chuỗi có độ dài lẻ, và tái tạoUint8Arraytừ các cặp byte liên tiếp. Chế độ UTF-8 giải mã mảng đó vớinew TextDecoder("utf-8", { fatal: true }); chế độ Latin-1 ánh xạ mỗi byte sangString.fromCharCode(b). - Chế độ trực tiếp để lặp nhanh. Chế độ trực tiếp được bật mặc định. Mỗi lần nhấn phím lên lịch chuyển đổi lại sau 150 ms (debounce) để bạn có thể dán, chỉnh sửa và xem bảng kia cập nhật mà không cần nhấn nút Chuyển đổi.
Tại sao dùng bộ chuyển đổi hex
- Gỡ lỗi giao thức nhị phân. Các định dạng dây như Modbus, DNP3 và CoAP đóng gói tiêu đề vào các offset byte cụ thể. Đọc khung đã bắt được dưới dạng hex hiển thị từng trường một cách rõ ràng, và chuyển ngược các byte đó sang ASCII bộc lộ mọi payload văn bản thuần nằm bên cạnh khung nhị phân.
- Làm việc với firmware nhúng. Các đầu dò JTAG và SWD báo cáo nội dung bộ nhớ dưới dạng hex. Dịch vùng bộ nhớ sang ASCII giúp phát hiện các chuỗi nhúng (đường dẫn tệp, thông báo lỗi, chữ ký nhà cung cấp) thường xác định vị trí đang xem xét trong firmware.
- Đọc bản bắt gói. Wireshark và tcpdump đều hiển thị bảng byte in mỗi gói dưới dạng hex ở trái và ASCII ở phải. Chuyển đổi một đoạn tại đây cho phép sao chép blob hex từ báo cáo lỗi hoặc nhật ký trò chuyện và đọc những gì byte thực sự chứa mà không cần nhập lại vào công cụ bắt gói.
- Diff ở cấp byte. So sánh hai tệp nhị phân thường dẫn đến việc phát hiện byte nào thay đổi. Chuyển đổi cả hai phía sang hex với nhóm nhất quán giúp diff căn chỉnh trong trình soạn thảo văn bản, nơi công cụ diff tích hợp có thể tô sáng các byte đã thay đổi.
Ứng dụng phổ biến
Chuyển đổi Hex ↔ ASCII xuất hiện trong kỹ thuật đảo ngược, bảo mật và công việc nhúng bất cứ khi nào luồng byte nhiều hơn chỉ là payload văn bản.
- Kỹ thuật đảo ngược: lấy dump hex từ nhị phân kháng chuỗi, chọn các chuỗi giải mã thành ASCII có thể in, và dùng chúng để xác định vị trí trong bản phân tích.
- Điều tra mạng: sao chép payload gói đơn lẻ từ Wireshark dưới dạng hex, dán vào đây và đọc văn bản lớp ứng dụng mà không cần xuất toàn bộ bản bắt gói.
- Xử lý tài liệu mật mã: khóa, IV hoặc thẻ HMAC thường đi kèm dưới dạng chuỗi hex. Giải mã trở lại byte xác nhận độ dài khớp với thuật toán (16 byte cho AES-128, 32 cho AES-256) trước khi gắn vào cấu hình.
Ví dụ thực hành
Chọn Văn bản → Hex, UTF-8, chữ thường, nhóm Cách mỗi byte, tắt tiền tố. Gõ Hi: đầu ra hiển thị 48 69. Bật tiền tố và chuyển nhóm sang Không nhóm, cùng đầu vào hiển thị 0x4869. Dán emoji 😀 làm đầu vào và chế độ UTF-8 hiển thị f0 9f 98 80 — bốn byte cho một code point, lý do emoji thường làm tăng kích thước truyền. Chuyển sang Hex → Văn bản và dán 0x48-65-6C 6C 6F: bộ phân tích loại bỏ tiền tố, gạch ngang và dấu cách rồi tái tạo Hello.
FAQ
Mã hóa hex là gì?
Mã hóa hex (hay mã hóa thập lục phân) viết luồng byte trong hệ cơ số 16, hai ký tự ASCII mỗi byte. Mỗi chữ số hex bao gồm bốn bit, vì vậy hai chữ số bao gồm một byte tám bit. Bảng chữ cái chạy từ 0-9 rồi đến A-F (hoặc a-f); kiểu chữ chỉ là lựa chọn trình bày và bộ giải mã chấp nhận cả hai. Hex là cách tiêu chuẩn để viết byte thô trong đặc tả giao thức, đầu ra gỡ lỗi và khóa mật mã vì nó nhỏ gọn hơn gấp đôi so với nhị phân và tránh các vấn đề ký tự không thể in của byte thô trong văn bản.
Tại sao emoji của tôi thành 4 byte trong hex?
UTF-8 là mã hóa có độ dài thay đổi. Ký tự ASCII (U+0000 đến U+007F) chiếm một byte, bổ sung Latin-1 chiếm hai, hầu hết code point BMP khác chiếm ba, và ký tự trên U+FFFF — bao gồm hầu hết emoji — chiếm bốn. Mặt cười 😀 là U+1F600 và mã hóa thành F0 9F 98 80. Nếu cần chế độ xem byte cố định, chuyển sang Latin-1 — nhưng Latin-1 chỉ bao gồm 256 code point đầu tiên, vì vậy bất kỳ ký tự nào ngoài phạm vi đó không thể chuyển đổi hai chiều.
Có hỗ trợ Latin-1 / ISO-8859-1 không?
Có. Chuyển tùy chọn Mã hóa văn bản sang Latin-1 (ISO-8859-1). Mã hóa lấy tám bit thấp của mỗi đơn vị mã JavaScript (charCodeAt(0) & 0xFF), khớp với ánh xạ byte đơn kế thừa. Giải mã dùng String.fromCharCode(byte) cho mỗi byte. Dùng Latin-1 khi làm việc với đầu ra từ các hệ thống Windows-1252 cũ hoặc tiền-Unicode nơi mỗi byte đại diện cho đúng một ký tự.
Chuyển đổi có thực hiện trong trình duyệt của tôi không?
Có. Bộ chuyển đổi chạy TextEncoder, TextDecoder và bộ phân tích nhỏ dưới dạng trang tĩnh đơn lẻ. Không có upload, không có lệnh gọi API và không có phân tích trên những gì bạn dán — chỉ có các chỉ số tải trang tiêu chuẩn dùng chung trên toàn site. Các byte hex tương tự bạn thấy ở đây là những gì một script Node hoặc hàm Lambda sẽ tạo ra với cùng đầu vào.
Chuyển đổi Hex ↔ ASCII là công việc nhỏ mà bất kỳ ai đọc giao thức nhị phân hoặc firmware nhúng đều thực hiện nhiều lần mỗi ngày. Thực hiện trong tab trình duyệt, với cùng các bộ mã gốc mà Node và V8 đã tích hợp sẵn, giữ công việc nhanh và luồng byte trên máy của bạn.