Little EndianBig 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ớ.


1. Định nghĩa

1.1. Little Endian

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

1.2. Big Endian

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

2. So sánh Little Endian và Big Endian

Tiêu chíLittle EndianBig Endian
Thứ tự byteLSB được lưu trữ ở địa chỉ thấp nhấtMSB được lưu trữ ở địa chỉ thấp nhất
Khả năng đọcNgược với cách đọc số trong mã hexCùng thứ tự với cách đọc số trong mã hex
Ứng dụngPhổ 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ấtThao tác với số nhỏ hơn trong một số kiến trúc hiệu quả hơnPhù hợp với cách đọc số trực tiếp

3. Tại sao cần biết về Little Endian và Big Endian?

3.1. Tương thích giữa các hệ thống

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.

3.2. Chuyển đổi giữa Little Endian và Big 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.


4. Ví dụ minh họa

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

5. Kết luận

  • Little Endian: Được sử dụng phổ biến trên các kiến trúc máy tính hiện đại như x86, AMD, với byte ít quan trọng nhất lưu trữ trước.
  • Big Endian: Được sử dụng trong một số hệ thống mạng và kiến trúc máy tính RISC, với byte quan trọng nhất lưu trữ trước.

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.