計算機基礎 位元組序轉換

2021-08-21 19:54:54 字數 1675 閱讀 4615

位元組序,顧名思義就是計算機儲存基本資料型別時 位元組的排列順序,計算機儲存位元組的順序分為兩種:大端位元組序和小端位元組序,儲存方式為 大端位元組序的0x11在硬體位址的高位,而小端位元組序的0x11在位址的低位。如圖

數值:0x11223344

大端:0x11223344

小端:0x44332211

那麼為什麼要有這樣的區別,難道就不能統一嗎?因為人類看數字的習慣是從左開始向右看,比如1227,是按照千位,百位,十位,個位的順序看,而計算機處理資料時,是從位址的低位向著位址的高位處理,所以如果為了符合兩個原則,所以0x11就應該放在位址的低位,就是小端位元組序的方式,這種方式效率高,但是在書面表示的時候不太符合人的直觀感受,所以也有另一種位元組排序方式就是大端模式,0x11放在位址的高位,依次向低位移動。現在的計算機在儲存和處理方面大部分都採用了小端位元組序,但是在網路傳輸的過程中,為了更加直觀的表示數字,就採用了大端位元組序。

#include #include #include #include #pragma   comment(lib,"ws2_32")

#pragma pack(1)

struct test

;#pragma pack()

int main()

; std::ofstream out("c:/users/tengxc/desktop/research.binary", std::ios::binary);

out.write(reinterpret_cast(&r), sizeof(test));

out.close();

getchar();

return 0;

}

例子中包括基本資料型別的位元組序和佔位符定義的結構體型別的位元組序,uint32_t型別a在記憶體中的的儲存方式為0x44332211,而b是修改了儲存方式的a,修改儲存方式之後,b仍然在此計算機中,所以仍然使用小端讀取方式,所以b表示的值變成了0x44332211,此外要介紹4個函式。

#include (linux標頭檔案)

uint32_t htonl(uint32_t hostlong);

uint32_t ntohl(uint32_t netlong);

uint16_t htons(uint16_t hostshort);

uint16_t ntohs(uint16_t netshort);

表示主機與網路中不同長度整型位元組序的相互轉換,

host to network long (32bit)

network to host long (32bit)

host to network short (16bit)

network to host short (16bit)

計算機中的位元組序問題

地點 基地 程式設計中的資料型別有很多事跨多個位元組的,比如char是用乙個位元組表示,而諸如int,float型別則用4個位元組表示double則用8個位元組表示,我們知道,資料物件例項是儲存在一定位址單元中的,我們也知道,儲存器中的每個位元組都由乙個唯一的位址標誌或者是儲存。那麼當資料物件跨多個...

計算機基礎 進製轉換

0111 0101 2 6 2 5 2 4 2 2 2 0 64 32 16 4 1 1171.把十進位制數字拆分成多個2的整數次方之和,把每個拆分結果單獨轉換成二進位制,最後把所有轉換結果合併。85 64 16 4 1 2 6 2 4 2 2 2 0 0100 0000 0001 0000 000...

python 網路位元組序轉換 網路位元組序

一.位元組序 位元組序是由於不同的主處理器和作業系統,對大於乙個位元組的變數在記憶體中的存放順序不同而產生的。位元組序通常有大端位元組序列和小端位元組序兩種分類方法。由於主機的千差萬別,主機的位元組序不能做到統一,但是網路上傳輸的數值,它們有統一的規定。網路位元組序 是指多位元組變數在網路傳輸時的表...