關於 大小端

簡單來講,小端就是看起來不順眼的那個。spa

0x12345678,存儲時也這麼存儲 12 34 56 78,看起來順眼,是大端。指針

0x12345678,存儲時這樣存儲 78 56 34 12,看起來不順眼,是小端。orm

切記:小端看起來不順眼。blog

 

判斷大小端方法:it

1.char 指針讀取int數據一個Byte方法:io

int IsBigEndian()
{
    int i = 0x12345678;
    unsigned char *p = (unsigned char*)(&i);
    if(*p == (char)0x12) return 1;//12 34 56 78這麼存儲的,就是大端
    return 0;
}

 2.利用union的性質,union老是從0地址偏移,聯合體union的存放順序是全部成員都從低地址開始存放class

 

typedef union _un
{
	char ch;
	int i;
}
myunion;

int IsLittleEndian()
{
	myunion un;
	un.i = 1;//對i賦值,若是是小端 01 00 00 00,若是是大端 00 00 00 01
	if(un.ch == 1) return 1;//小端
	return 0;
}
//注意:最好是先給int賦值,而後判斷char的值,在給int賦值後可以保證其餘3個字節爲0
int IsLittleEndian1()
{
  myunion un;
  //un.i = 0;//清零
  un.ch = 1;//對ch賦值,低地址字節必定是01,即:01 XX XX XX 除非初始化爲0,那麼爲 01 00 00 00
  if(un.i == 1) return 1;//小端 按照小端讀出來是1
  return 0;
}

 

 大小端總結完畢,記住一點:小端就是看起來不順眼的那個,這仍是公司的某大哥教給個人,我平時老是記不住大小端,今後就記住了。nio

相關文章
相關標籤/搜索