Đảo endianness
Đầu vào (hex)
Đầu ra sau khi hoán đổi
Chi tiết kỹ thuật
Cách hoạt động của công cụ Hoán đổi Endianness
Công cụ làm gì
Công cụ Hoán đổi Endianness đảo thứ tự byte của đầu vào dạng thập lục phân trong một kích thước từ (word) có thể cấu hình (2, 4 hoặc 8 byte). Công cụ được thiết kế để chuyển đổi giữa biểu diễn little-endian và big-endian của các số nguyên có độ rộng cố định được lưu dưới dạng hex, một nhu cầu phổ biến khi làm việc với định dạng tệp nhị phân, giao thức mạng hoặc các công cụ gỡ lỗi mức thấp không thống nhất về thứ tự byte.
Các trường hợp sử dụng phổ biến cho lập trình viên
Kỹ sư reverse chuẩn hóa các bản dump hex từ x86 hoặc ARM (little-endian) và PowerPC hoặc MIPS (truyền thống là big-endian) để có thể so sánh giá trị giữa các kiến trúc. Kỹ sư mạng chuyển số nguyên theo thứ tự byte của host sang thứ tự byte mạng (luôn là big-endian) trước khi nhúng vào các bản bắt gói tin. Lập trình viên nhúng gỡ lỗi các cấu trúc lưu trong flash bằng cách căn chỉnh lại byte theo định dạng mà công cụ phân tích của họ mong đợi.
Định dạng dữ liệu, kiểu hoặc biến thể
Đầu vào chấp nhận hex có hoặc không có tiền tố `0x` và khoảng trắng tùy ý. Đầu ra được hiển thị dưới dạng các byte hex chữ thường, phân tách bằng khoảng trắng để rõ ràng. Kích thước từ 2, 4 và 8 byte lần lượt tương ứng với số nguyên 16, 32 và 64 bit. Nhiều từ được hoán đổi độc lập: với kích thước từ 4 byte, 12345678 9ABCDEF0 trở thành 78 56 34 12 rồi đến F0 DE BC 9A.
Các lỗi thường gặp và trường hợp biên
Đầu vào phải là một số lượng byte nguyên vẹn (số chữ số hex chẵn) và một số lượng từ nguyên vẹn (chia hết cho kích thước từ đã cấu hình theo byte). Kích thước không khớp sẽ trả về lỗi thay vì âm thầm cắt bớt. Thứ tự byte mạng luôn là big-endian, trong khi x86 / ARM dùng little-endian — hãy hoán đổi byte khi đọc hoặc ghi các số nguyên theo định dạng wire.
Khi nào nên dùng công cụ này thay vì viết mã
Hãy dùng công cụ trên trình duyệt cho các chuyển đổi một lần khi đọc dump nhị phân hoặc gỡ lỗi. Trong mã, ưu tiên `DataView` với cờ `littleEndian` tường minh trong JavaScript, `byteorder='little'|'big'` trong `int.from_bytes` của Python, `binary.LittleEndian.Uint32` trong Go hoặc `ntohl` / `htonl` trong C — các cách này thể hiện ý định rõ ràng hơn và tránh phải vòng qua hex.