Little Endian và Big Endian là hai cách lưu trữ và truyền dữ liệu đa byte (ví dụ như số nguyên 16-bit, 32-bit, hoặc 64-bit) trong bộ nhớ của máy tính. Chúng định nghĩa thứ tự sắp xếp các byte của một giá trị đa byte trong bộ nhớ.
Trong Little Endian, byte có giá trị thấp nhất (least significant byte – LSB) được lưu trữ ở địa chỉ bộ nhớ thấp nhất (hoặc trước tiên). Điều này có nghĩa là thứ tự byte trong bộ nhớ sẽ là ngược lại với cách đọc số đó.
Ví dụ: Một số nguyên 32-bit 0x12345678
(hexadecimal) sẽ được lưu trữ trong bộ nhớ như sau (từ địa chỉ thấp đến cao):
Địa chỉ | Giá trị ----------------- 0x00 | 0x78 0x01 | 0x56 0x02 | 0x34 0x03 | 0x12
Trong Big Endian, byte có giá trị cao nhất (most significant byte – MSB) được lưu trữ ở địa chỉ bộ nhớ thấp nhất (hoặc trước tiên). Thứ tự lưu trữ giống với thứ tự đọc giá trị.
Ví dụ: Số nguyên 32-bit 0x12345678
sẽ được lưu trữ trong bộ nhớ như sau:
Địa chỉ | Giá trị ----------------- 0x00 | 0x12 0x01 | 0x34 0x02 | 0x56 0x03 | 0x78
Tiêu chí | Little Endian | Big Endian |
---|---|---|
Thứ tự byte | LSB được lưu trữ ở địa chỉ thấp nhất | MSB được lưu trữ ở địa chỉ thấp nhất |
Khả năng đọc | Ngược với cách đọc số trong mã hex | Cùng thứ tự với cách đọc số trong mã hex |
Ứng dụng | Phổ biến trên các máy tính x86 (Intel, AMD) | Sử dụng trên nhiều kiến trúc RISC, IBM, mạng |
Hiệu suất | Thao tác với số nhỏ hơn trong một số kiến trúc hiệu quả hơn | Phù hợp với cách đọc số trực tiếp |
Khi làm việc với nhiều hệ thống khác nhau (ví dụ: máy chủ có cấu trúc phần cứng khác nhau), việc hiểu Little Endian và Big Endian rất quan trọng để đảm bảo rằng dữ liệu được truyền và xử lý chính xác. Đặc biệt, trong mạng máy tính, các giao thức thường tuân theo quy ước Big Endian, trong khi các máy tính cá nhân sử dụng Little Endian.
Trong một số trường hợp, bạn sẽ cần chuyển đổi giữa hai cách lưu trữ này để đảm bảo tính tương thích. Các ngôn ngữ lập trình như C, C++ cung cấp các hàm hỗ trợ chuyển đổi như htons()
, htonl()
để chuyển đổi từ kiểu Little Endian sang Big Endian và ngược lại.
Ví dụ: trong mạng máy tính, thứ tự byte trong khi truyền dữ liệu sử dụng Big Endian (network byte order), nhưng trên máy tính x86, dữ liệu lại được lưu trữ theo Little Endian.
Giả sử bạn có số nguyên 16-bit là 0x1234
.
Little Endian sẽ lưu trữ số này trong bộ nhớ như sau:
Địa chỉ | Giá trị
-----------------
0x00 | 0x34
0x01 | 0x12
Big Endian sẽ lưu trữ như sau:
Địa chỉ | Giá trị
-----------------
0x00 | 0x12
0x01 | 0x34
Hiểu rõ sự khác biệt giữa Little Endian và Big Endian sẽ giúp bạn xử lý tốt hơn các vấn đề liên quan đến xử lý dữ liệu đa byte, đặc biệt khi làm việc với các hệ thống có kiến trúc khác nhau hoặc khi truyền dữ liệu qua mạng.