0. 介紹
大小端計算機存儲數據而安排字節的兩種順序。
針對的是字節。
大端與我們平時書寫的順序一致。
1. 大小端的判定
不需要手動判斷。
有一個頭文件endian.h;
可能會有宏
__BYTE_ORDER
__BIG_ENDIAN
__LITTLE_ENDIAN
通過庫來進行判斷。
- 手動判斷
根據字節存取的順序進行判斷
int getEndian(void){unsigned short val = 0001;unsigned char *p = (unsigned char *) (&val);int end = BIG_ENDIAN;if(p[0] == 1){end = LITTLE_ENDIAN;}return end;
}
2. 網絡字節序轉換
使用函數ntohs()
ntohl()
htons()
htonl()
即可。
3. 提取整形中的第幾字節數據
static __always_inline unsigned char
extractbyte (op_t x, unsigned int idx)
{if (__BYTE_ORDER == __LITTLE_ENDIAN)return x >> (idx * CHAR_BIT);elsereturn x >> (sizeof (x) - 1 - idx) * CHAR_BIT;
}
4. 重復幾字節的數據
static __always_inline op_t
repeat_bytes (unsigned char c_in)
{return ((op_t)-1 / 0xff) * c_in;
}