判断是大端还是小端
int isBigEndian(void) {
long one = 1;
return !(*((char *)(&one)));
}
内存对齐
//当分配地址addr时, 要将该地址以size为倍数对齐, 而且要得到是比addr大的值, 则使用_ALIGN宏
#define _ALIGN(addr,size) (((addr)+(size)-1)&(~((size)-1)))
整数字节交换
// Int 16 位短整数字节交换,简单的移位再或运算。
static inline uint16_t bswap_16(uint16_t x) {
return (x >> 8) | (x << 8);
}
// Int 32 位长整数字节交换
static inline uint32_t bswap_32(uint32_t x) {
x = ((x << 8) &0xFF00FF00) | ((x >> 8) &0x00FF00FF);
return (x >> 16) | (x << 16);
}
固定bit位的最大数
int val = -1 ^ (-1 << bits);
// 如 bits =10, val=1023