程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 大小端學習筆記

大小端學習筆記

編輯:C++入門知識

大端編碼方式:字數據的高字節存儲在低地址中。
小端編碼方式:字數據的低字節存儲在低地址中。

簡單而直觀地說,(當然這種理解方式是不嚴謹的)。
看了下一篇CSDN博客寫得挺全面,文末會給出相關地址,不過內容實在是有點太多了,所以還是自己寫寫學習筆記吧,雖然不是新知識了,溫故而知新總是好的。

在這裡請允許我摘錄自己需要的那部分:

另有就是面試的時候經常會遇到的,寫一個小程序判斷編譯器是大端還是小端模式(大端返回0,小端返回1):

= (c.b == 

每次看到這個代碼都覺得很蛋疼,主要是因為自己理解得本來就不是特別深刻,所以給出另外一種更直觀明了的判斷方法:

=  (c.b == 

因為聯合體的中所有成員都是從低地址開始存放的,所以直接去比較c.b和0x12的值即可,如果相同,那就說明是大端格式了(返回1);如果不同,那就說明是小端格式了(返回0)。

 

大小端地址是怎麼來的?
在操作系統中我們存儲數據以字節為單位,一個字節byte型8個bit,char型short型16個bit,還有int型float型long型(取決於編譯器)32個bit,double的64個bit。這個時候就需要區分存儲模式了。
而int型和long型又要取決於平台和編譯器,比如編寫C或者C++程序,有時考慮到跨平台的兼容性問題,我們就需要明確使用__int8, __int16, __int32, __int64。

 


實際上,操作系統一般都是小端的,而像Java和所有網絡通信協議都是大端的,所以當我們進行網絡編程如socket編程的時候就要注意這點,也因此我們經常需要用到這些函數等進行大小端字節序的轉換(不過應用的時候我只會照搬照套,實際上理解得並不深刻)。
如果想要再深入理解的話,就要翻翻計算機操作系統相關的書籍了。這方面的相關知識實在是太薄弱了...《現代操作系統》這本書不錯,《自己動手寫操作系統》這本書聽說也很好,名字聽著就顯得很親民——自己寫。。。有機會要讀一讀寫一寫。

 

如果還想了解一下其他相關知識,可以參考下面的博文:

 《詳解大端模式和小端模式》

 

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved