計算機在存儲數據到內存的時候遵守大端模式和小端模式,也就是我們所說的大尾和小尾模式 大端(大尾):數據的高字節保存在內存的低地址 小端(小尾):數據的高字節保存在內存的高地址 下面是摘自百度百科,這個例子比較好理解 大端模式 所謂的大端模式(Big-endian),是指數據的高字節,保存在內存的低地址中,而數據的低字節,保存在內存的高地址中,這樣的存儲模式有點兒類似於把數據當作字符串順序處理:地址由小向大增加,而數據從高位往低位放; 例子: 0000430: e684 6c4e 0100 1800 53ef 0100 0100 0000 0000440: b484 6c4e 004e ed00 0000 0000 0100 0000 在大端模式下,前32位應該這樣讀: e6 84 6c 4e ( 假設int占4個字節) 記憶方法: 地址的增長順序與值的增長順序相同 小端模式 所謂的小端模式(Little-endian),是指數據的高字節保存在內存的高地址中,而數據的低字節保存在內存的低地址中,這種存儲模式將地址的高低和數據位權有效地結合起來,高地址部分權值高,低地址部分權值低,和我們的邏輯方法一致。 例子: 0000430: e684 6c4e 0100 1800 53ef 0100 0100 0000 0000440: b484 6c4e 004e ed00 0000 0000 0100 0000 在小端模式下,前32位應該這樣讀: 4e 6c 84 e6( 假設int占4個字節) 記憶方法: 地址的增長順序與值的增長順序相反 我這練習測試的就是在普通PC上,使用的x86架構,使用的是小端模式, 參考: https://blog.csdn.net/chy555chy/article/details/51966160 https://blog.csdn.net/chennut0802/article/details/6544428
例子:
在C代碼中測試小端模式
下面是定義了一個變量,然后給其賦值了0x12345678
然后我們在VC 6.0編譯器下面進入調試模式,將定義的變量拖入到內存中,查看內存的數據即可恍然大悟
我們分析下,上圖中在我們看到的,內地地址0012FF78---->0012FFAC由上至下是從小到大,從低到高
當我們從左至右觀察,也發現內存編號0012FF78 開始從左向右往后走也是從小到大,分別依次是:0012FF78 ,0012FF79, 0012FF7A, 0012FF7B 這4個地址就是對應的CC CC CC CC
那么根據上面的分析,知道內存中的高低分布了,在我們寫C代碼的時候定義0x12345678的時候,其順序是高位-->低位,也就是從0x12開始是12是高位,后面是地位
所以在內存中的分布按照小端模式來存儲的話:高位放在高位,低位放在地位 ,從左到右:78 56 34 12