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


所謂大端就是指高位值在內存中放低位地址,所謂小端是指低位值在內存中放低位地址。比如 0x12345678 在大端機上是 12345678,在小端機上是 78564312,而一個主機是大端還是小端要看CPU類型以及運行在上面的操作系統。同一款CPU在不同的操作系統使用的大小端情況是不同的。當然我們通常使用的 x86 + windows是小端。

測試大小端一般使用 union的特性。union是一個聯合體,所有變量公用一塊內存,只是在不同的時候解釋不同。其在內存中存儲是按最長的那個變量所需要的位數來開辟內存的。

#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輸出: small

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

 

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

 

 

延伸閱讀:

主機字節序(大端/小端) 和 網絡字節序


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM