§

Options

Chế độ
Nhóm hex
Tiền tố 0x
Kiểu chữ
Mã hóa văn bản
§

Đầu vào

§

Đầu ra

Kỹ sư tích hợp tại VietinBank thường dùng công cụ này để phân tích tin nhắn thanh toán ISO 8583 — mỗi trường tài chính hiện ra dưới dạng chuỗi byte hex, cần giải mã sang ASCII để đọc mã giao dịch và tham số ủy quyền. Tại PetroVietnam, nhóm SCADA kiểm tra khung Modbus RTU truyền trên đường serial dầu khí bằng cách dán dump hex vào đây để xác nhận giá trị thanh ghi cảm biến. Vietnam Airlines áp dụng tương tự cho frame ARINC-429 avionics khi bảo dưỡng nội bộ đội bay, chuyển payload hex thành mã ASCII hệ thống để rút ngắn thời gian chẩn đoán.

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.

  1. 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ột Uint8Array giá trị byte. Chế độ Latin-1 lấy tám bit thấp của mỗi đơn vị mã qua charCodeAt(0) & 0xFF, đây là phép chuyển đổi mà các bộ mã ISO-8859-1 kế thừa thực hiện.
  2. 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.
  3. Á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.
  4. 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ố 0x khỏ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ạo Uint8Array từ các cặp byte liên tiếp. Chế độ UTF-8 giải mã mảng đó với new TextDecoder("utf-8", { fatal: true }); chế độ Latin-1 ánh xạ mỗi byte sang String.fromCharCode(b).
  5. 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.