大小端
就不說詳細定義了。
小端
特徵:數據的低字節保存在內存低地址,高字節保存在內存高地址。
注意:數據類型 char 和 unsigned char 類型是沒有大小端之分的。
網絡通信中,終端與服務器的通信數據需要保證大小端一致,終端和服務端約定一種方式,進行通信即可。
例如約定小端模式。那麼終端在數據傳輸前,要將數據類型進行檢測處理。
int little = 1;
if (*(char*)(&little) == 0) {
printf("big endian\n");
} else {
printf("little endian\n");
}
測試
#include <stdio.h>
unsigned char is_little_endian() {
static int little = 1;
return (*(char*)(&little) == 1);
}
void swap(void* data, int n) {
if (is_little_endian()) return;
int i;
unsigned char *p, temp;
p = (unsigned char*)data;
for (i = 0; i < n / 2; i++) {
temp = p[i];
p[i] = p[n - 1 - i];
p[n - 1 - i] = temp;
}
}
int main(int argc, char** argv) {
int a = 0x12345678;
swap(&a, sizeof(a));
printf("a: %x\n", a);
return 0;
}