以前某門課程的時候聽說過位元組序的問題,就是因為作業系統和cpu的問題,對多位元組變數的記憶體儲存順序不
同。比如乙個16位的整數,由兩個位元組構成,有的系統會將高位元組放在記憶體的低位址,而有的系統則會將高字
節放在記憶體的高位址上。所以存在位元組序的問題,一般大於乙個自己的變數的型別的表示方法有兩種:小端字
節序(便是變數的記憶體位址的起始位址存放低位元組,高位元組順序存放)和大端位元組序(在表示變數的記憶體位址
的起始位址存放高位元組,低位元組順序存放)。
例如變數的值為0xabcd,在大端位元組序和小端位元組序的系統中二者的存放順序是不同的,假設存放值0xabcd
的記憶體位址的起始位址為0,分別如下圖所示:
然後我們可以根據下面的例子判斷出自己的系統是大端位元組序還是小端位元組序 #
include
#include
/*** 聯合型別的變數型別,用於測試位元組序
* 成員value的高低端位元組可以由成員byte按位元組訪問
** */
typedef
union
to;int main(
int argc,
char
*ar**)
else
if(typeorder.byte[0]
== 0xab&
& typeorder.byte[1]
== 0xcd)
return 0;}
我的機子的執行結果如下:
zhou@zhou:~/test$ ./test
low endian byte orderbyte[0]:0xcd,byte[1]:0xab
zhou@zhou:~/test$
大端位元組序 小端位元組序
大端位元組序 大端儲存模式是指資料的低位元組內容儲存到記憶體的高位址中,而資料的高位元組內容儲存到記憶體的低位址中 小端位元組序 小端儲存模式是指資料的低位元組內容儲存到記憶體的低位址中,而資料的高位元組內容儲存到記憶體的高位址中 程式驗證 include int main return 0 程式改...
大端小端位元組序
總結 大端就是從小到大開始放,小端就是從大到小開始放 little endian模式的cpu對運算元的存放方式是從低位元組到高位元組,而big endian模式對運算元的存放方式是從高位元組到低位元組。例如,16bit寬的數0x1234在little endian模式cpu記憶體中的存放方式 假設從...
小端位元組序與大端位元組序
端模式分為 小端位元組序和大端位元組序,也就是位元組在記憶體中的順序。小端位元組序 低位元組存於記憶體低位址 高位元組存於記憶體高位址。如乙個long型資料0x12345678 0x0029f458 0x78 0x0029f459 0x56 0x0029f45a 0x34 0x0029f45b 0x...