1. 程式人生 > 其它 >大小端

大小端

1. 定義

1.1 大端位元組序

大端位元組序是指一個整數的高位位元組(23-31 bit)儲存在記憶體的低地址處, 低位元組(0-7 bit)儲存在記憶體的高地址處。

1.2 小端位元組序

小端位元組序則是指整數的高位位元組儲存在記憶體的高地址處, 而低位位元組則儲存在記憶體的低地址處。

2. 判斷機器位元組序

int main(){
    union{
        short value;
        char union_bytes[sizeof(short)];
    }test;
    test.value = 0x0102;
    if((test.union_bytes[0]==1)&&(test.union_bytes[1]==2)){
        std::cout << "big endian" << std::endl;
    }else if((test.union_bytes[0]==2)&&(test.union_bytes[1]==1)){
        std::cout << "small endian" << std::endl;
    }else{
        std::cout << "unknow..." << std::endl;
    }
    return 0;
}

3. 轉換

Linux提供瞭如下4個函式來完成主機位元組序和網路位元組序之間的轉換

#include <netinet/in.h>
unsigned long int htonl(unsigned long int hostlong);
unsigned short int htons(unsigned short int hostshort)
unsigned long int ntohl(unsigned long int netlong);
unsigned short int ntohs(unsigned short int netshort)