大小端

大小端

就不說詳細定義了。


小端

特徵:數據的低字節保存在內存低地址,高字節保存在內存高地址。
注意:數據類型 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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章