C語言複習:大小端

這篇博客是對於我個人的知識的複習,當然如果有某位大佬能夠指出這裏面有哪些概念含糊不清或者難懂,麻煩指出來感激不盡。

關於大端小端的概念

  • 小端:數據的高位字節存放在高地址內,數據的低位字節存放在低地址內。
  • 大端:數據的高位字節存放在低地址內,數據的低位字節存放在高地址內

目前有兩種方法判斷機器的大小端

  1. int變量的地址強轉爲char*的指針,最後用指針取值得到的就是低地址的值
#include<stdio.h>
int main()
{
	test.a = 0x12345678;
	char* m = (char*)&i;
	if (*m = 0x78)
	printf("是小端");

}

  1. 利用聯合體的特性,各成員共享同一段內存空間,一個聯合體的長度爲最長成員長度。
#include<stdio.h>

union mm
{
	int a;
	char c;
}test;

int main()
{
	test.a = 0x12345678;
	//char* m = (char*)&i;
	//if (*m = 0x78)
	//	printf("是小端");
	if (test.c = 0x78)
		printf("是小端");

}

上面的基本在大一時的老師就會講了,我們的重點不是上面,而是爲什麼要有大小端之分?將所有的高位字節存放在高地址,低位字節放在低地址就行了?

因爲在計算機中是以字節爲基本單位的,除了1字節的char類型,4字節的int,8字節(某些系統)的long類型,而且對於大於8位的寄存器,例如32位或者64位,就產生了如何將多個字節按順序進行安排?也就有了大端儲存模式和小端儲存模式。

常見的X86結構是小端模式,ARM,DSP也是小端模式,某些ARM可以自己選擇硬件的大小端模式。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章