星期二, 3月 07, 2017

[ C ] Little endian 和 Big endian


little endian和big endian的差別在於放入記憶體的值,
順序是相反的。

假設我有個值是12345換成二進制是:
11000000111001

再換成十六進制
0000 0000 0000 0000 0011 0000 0011 1001
   0       0       0       0       3       0        3      9         =     0x00003039

1 char =  1 byte = 8 bits

Big endian
00   |    00    |    30    |    39
 a        a+1       a+2       a+3

Little endian
39   |    30    |    00    |    00
 a        a+1       a+2       a+3

所以我用判斷式來看是哪一種,

unsigned int x = 12345;
char *a = (char*) &x;

if(*a == 0x39)
printf("Little endian\n");
else
printf("Big endian\n");

====Output=====
*a     is: 0x39
*(a+1) is: 0x30
*(a+2) is: 0x0
*(a+2) is: 0x0
Little endian



Ref
Ref_2

沒有留言: