Bit Endian và Little Endian trong lập trình
1. So sánh hệ thống Big Endian và Litle Edian:  
    - Big Endian: Byte cao nhấtsẽđược sắpđầutiêntức là (nếu hàng ngang thì) xếp phía bên trái ngoài cùng. Liên hệslide 45
- LitleEdian: Byte thấpnhấtsẽđcsắpđầutiêntức là (nếu hàng ngang thì) xếp phía bên trái ngoài cùng.
- LitleEdian: Byte thấpnhấtsẽđcsắpđầutiêntức là (nếu hàng ngang thì) xếp phía bên trái ngoài cùng.
   - Cáchệthốngdùngvi xửlýcủaintel thìdùngnềntảnglittle endian,vàđasốđềuvậy
- Cáchệthốngdùngchip củasolaris, motorolathìdùngbig endian
- Cáchệthốngdùngchip củasolaris, motorolathìdùngbig endian
  Ví dụ:
                                    --Byte cao nhất--  ------------   ------------   --byte thấpnhất--số123456 = 00000000 00000001 11100010 01000000
Số 123456 lần lượt được lưu trong hệ thống Big Endian và Little Endian dưới đây:
______________________________________________________
TrongBig Endian là: 00000000 00000001 11100010 01000000
LittleEndian là: 01000000 11100010 0000000100000000
2. Để xác định hệ thống dùng cách lưu gì ta dùng đoạn mã sau để xác định:
#include <iostream>
using namespacestd;
void main()
{
      int i = 0x12345678;
      char *p;
      p = (char*) &i;
      if (*p == 0x78){
            printf("Little endian\n");
      } else {
            printf("Big endian\n");
      }
      system("pause");
}
3. Ví dụ:
4. Một số câu hỏi:
Viết hàm Swap Endian của số int x đưa vào. Ví dụ: int x = 0xA0B0C0D0
--> Kết quả: Endian_Swap(int x) = 0xD0C0B0A0
#include <iostream>
using namespacestd;
int Endian_Swap(int x);//4byte
void main()
{
      int x = 0xA0B0C0D0;
      printf("Endian_Swap 0x%X\n", Endian_Swap(x));
      //output: 0xDOC0B0A0
      system("pause");
}
int Endian_Swap(int x)
{
     return (
              ((x >> 24) & 0x000000FF) |
              ((x >> 8)  & 0x0000FF00) |
              ((x << 8)  & 0x00FF0000) |
              ((x << 24) & 0xFF000000)
              );
}

 
Leave a Comment