#include <stdio.h> typedef union { long l; unsigned char c[4]; } Endian; int main(int argc, char *argv[]) { Endian a; a.l = 0x12345678; if (a.c[0] == 0x78 && a.c[1] == 0x56 && a.c[2] == 0x34 && a.c[3] == 0x12) printf("Little endian\n"); else if (a.c[0] == 0x12 && a.c[1] == 0x34 && a.c[2] == 0x56 && a.c[3] == 0x78) printf("Big endian\n"); printf("a.l = 0x%lx\n", a.l); printf("%p: 0x%02x\n", &a.c[0], a.c[0]); printf("%p: 0x%02x\n", &a.c[1], a.c[1]); printf("%p: 0x%02x\n", &a.c[2], a.c[2]); printf("%p: 0x%02x\n", &a.c[3], a.c[3]); return 0; }
執行結果: Little endian a.l = 0x12345678 0x7efd9634: 0x78 0x7efd9635: 0x56 0x7efd9636: 0x34 0x7efd9637: 0x12
Ex: long Data=0x12345678,寫到記憶體位址時。 - Big Endian,最高位元組在位址最低位元,最低位元組在位址最高位元,依次排列。 Address Big-endian ------------------------------------- 0x0000 0x12 0x0001 0x34 0x0002 0x56 0x0003 0x78 ------------------------------------- - Little Endian,最低位元組在最低位元,最高位元組在最高位元,反序排列。 Address Big-endian ------------------------------------- 0x0000 0x78 0x0001 0x56 0x0002 0x34 0x0003 0x12 -------------------------------------2. 範例程式2
#include <stdio.h> int main(int argc, char *argv[]) { unsigned int i = 0x00000001; char *c = (char *)&i; if (*c) printf("Little endian\n"); else printf("Big endian\n"); return 0; }
整數宣告中,數值在記憶體中的排列 unsigned int i = 0x00000001; Address Big-endian Little-endian ------------------------------------- 0x0000 0x00 0x01 0x0001 0x00 0x00 0x0002 0x00 0x00 0x0003 0x01 0x00 ------------------------------------- 字元宣告中,數值在記憶體中的排列 char *c Address Big-endian Little-endian ------------------------------------- 0x0000 0x00 0x01 -------------------------------------3. 參考來源
https://zh.wikipedia.org/wiki/%E5%AD%97%E8%8A%82%E5%BA%8F
沒有留言:
張貼留言