用C語言,如何判斷主機是 大端仍是小端(字節序)

http://www.cnblogs.com/52php/p/6114643.htmlphp

 

所謂大端就是指高位值在內存中放低位地址,所謂小端是指低位值在內存中放低位地址。好比 0x12345678 在大端機上是 12345678,在小端機上是 78564312,而一個主機是大端仍是小端要看CPU類型以及運行在上面的操做系統。同一款CPU在不一樣的操做系統使用的大小端狀況是不一樣的。固然咱們一般使用的 x86 + windows是小端。html

測試大小端通常使用 union的特性。union是一個聯合體,全部變量公用一塊內存,只是在不一樣的時候解釋不一樣。其在內存中存儲是按最長的那個變量所須要的位數來開闢內存的windows

#include <stdio.h>測試

#include <stdbool.h>
 
union  {
     int  number;
     char  s;
} test;
 
bool  testBigEndin() {
     test.number = 0x01000002;
     return  (test.s == 0x01);
}
 
int  main( int  argc,  char  **argv) {
     if  (testBigEndin()) {
         printf ( "big" );
     else  {
         printf ( "small" );
     }
}

個人 Mac輸出: smallspa

其中 union的實際內存長度是int,即一個字,在32位機上是32位。而char是一個Byte(8位),只會取第一個低地址字節。因此它的值能夠用來判斷大小端。操作系統

 

舒適提示:電腦讀取內存數據時,是(從左到右)從 低位地址 到 高位地址

相關文章
相關標籤/搜索