大小端互换
void endian_swap(void *data, int size) {
// size must 2 4 8
unsigned char *swdata = (unsigned char *)data;
for (int i = 0; i < size / 2; ++i) {
unsigned char temp = swdata[i];
swdata[i] = swdata[size - i - 1];
swdata[size - i - 1] = temp;
}
}
判断系统大小端
bool is_big_endian() {
short int x;
char x1, x2;
x = 0x1122;
x1 = ((char *)&x)[0]; // 取x的低地址的数据0x22给char类型x1,如果x1=0x22,说明为小段模式
x2 = ((char *)&x)[1]; // 取x的高地址的数据给0x11char类型x2,如果x2=0x22,说明为大端模式
return (x1 == 0x11);
}
reference