大端、小端問題
阿新 • • 發佈:2018-12-05
大端、小端問題
1.大小端概念:
大端:將資料的地位,放到記憶體的高地址處;
小端:將資料的地位,放到記憶體的地地址處;
在計算機中,記憶體是儲存容量以位元組為基本單位的;
資料是用 二進位制為基本單位的
2.資料在記憶體中的地址
我們拿一個整形舉例,一個整形,在32位平臺下佔4個位元組,但是取地址時,我們通常認為數值最小的那個地址是這個整形的地址。
3.如何驗證
//方法一;
int check_sys()
{
int i = 1;
return (*(char*)&i);
}
int main()
{
int ret = check_sys ();
if (ret == 1)
printf("小端\n");
else
printf("大端\n");
return 0;
}
int i=1 //以32 位為例, 整形在記憶體中佔4個位元組,以補碼形式儲存
0x1 0x2 0x3 0x4 ——>計算機中記憶體的增長 (模擬)
0000 0001 0000 0000 0000 0000 0000 0000 ——>小端
0000 0000 0000 0000 0000 0000 0000 0001 ——>大端
char型別佔1個位元組
如果是小端,在(char*)強轉時擷取低地址處1個位元組,解引用返回是1 ;
反之是 0,則說明是大端;
//方法二
int check_sys()
{
union X
{
int i;
char j;
}x;
x.i=1;
return x.j;
}
int main()
{
int ret = check_sys();
if (ret == 1)
printf("小端\n");
else
printf("大端\n");
return 0;
}
方法二在原理上與方法一樣,在實現形式上有所不同;
聯合體裡面的成員變數共用一塊空間;
返回 x.j時,擷取低地址處;