大小端問題 多位元組物件的儲存規則

2021-10-04 19:55:37 字數 835 閱讀 2433

在幾乎所有的機器上,多位元組物件都被儲存為連續的位元組序列,物件的位址為所使用位元組中最小的位址。

例子:

假設乙個型別為 int 的變數 x 的位址為 0x100,也就是說,位址表示式 &x 的值為 0x100。那麼,(假設資料型別 int 為32位表示)x 的 4 個位元組將被儲存在記憶體的 0x100、0x101、0x102 和 0x103 位置。

排列表示乙個物件的位元組有兩個通用的規則。

考慮乙個 w 位的整數,其位表示為 [ xw-1, xw-2, ……, x1, x0 ],其中 xw-1 是最高有效位,而 x0 是最低有效位。

假設 w 是 8 的倍數,這些位就能被分組成為位元組,其中最高有效位元組包含位 [ xw-1, xw-2, ……, xw-8 ],而最低有效位位元組包含位 [ x7, x6, ……, x0 ],其它位元組包含中間位。

某些機器選擇在記憶體中按照從最低有效位元組到最高有效位元組的順序儲存物件,而林一些機器則按照從最高有效位元組到最低有效位元組的順序儲存。前一種規則——最低有效位元組在最前面的方式,稱為小端法。後一種規則——最高有效位元組在最前面的方式,稱為大端法

例子

假設變數 x 的型別為 int,位於位址 0x100 處,他的十六進製制值為 0x01234567。位址範圍 0x100 ~ 0x103 的位元組順序依賴於機器的型別:

注意:在字 0x01234567 中,高位位元組的十六進製制值為 0x01,而低位位元組值為 0x67。

記憶體的位元組儲存大小端問題(一)

記憶體大小端判斷 思路 聯合體union的存放順序是所有成員都從低位址開始存放,利用該特性就可以輕鬆地獲得了 cpu對記憶體是採用little endian還是big endian模式讀寫。給出c linux其實也差不了多少 include using namespace std union jud...

記憶體的位元組儲存大小端問題(二)

大端和小端 網路位元組序和主機位元組序 大端 big endian 即網路位元組序。小端 littile endian 即主機位元組序。記憶方式 網路的範圍很大,所以大端是網路位元組序。大端方式將高位位元組存放在起始位址,小端方式將低位位元組存放在起始位址。採用大端方式進行資料存放符合人類的正常思維...

大小端,位元組序問題

總結 1 80x86使用小端法,網路位元組序使用大端法。2 二進位制的網路程式設計中,傳送資料,最好以unsigned char,unsigned short,unsigned int 來處理,unsigned short unsigned short 以網路位元組序處理後再拷貝到傳送的buffer...