轉自:http://blog.csdn.net/forestlight/article/details/6933528
所謂大端就是指高位值在內存中放低位地址,所謂小端是指低位值在內存中放低位地址。比如0x12345678在大端機上是12345678,在小端機上是78564312,而一個主機是大端還是小端要看cpu類型以及運行在上面的操作系統。同一款cpu在不同的操作系統使用的大小端情況是不同的。當然我們通常使用的x86+windows是小端。
測試大小端一般使用union的特性。union是一個聯合體,所有變量公用一塊內存,只是在不同的時候解釋不同。其在內存中存儲是按最長的那個變量所需要的位數來開辟內存的。
代碼如下:
1 #include <iostream> 2 using namespace std; 3 4 union 5 { 6 int number; 7 char s; 8 }test; 9 10 bool testBigEndin() 11 { 12 test.number=0x01000002; 13 return (test.s==0x01); 14 } 15 16 void main() 17 { 18 if (testBigEndin()) 19 cout<<"big"<<endl; 20 else 21 cout<<"small"<<endl; 22 }
其中union的實際內存長度是int,即一個字,在32位機上是32位。而char是一個byte,只會取第一個低地址字節。所以他的值可以用來判斷大小端。