大小端與網路通訊

2021-08-19 08:20:48 字數 1148 閱讀 5219

執行在同一臺計算機上的程序相互通訊時,一般不用考慮位元組的順序(位元組序),位元組序是乙個處理器架構特性。

大端模式優點:符號位在所表示的資料的記憶體的第乙個位元組中,便於快速判斷資料的正負和大小

小端模式優點:

1. 記憶體的低位址處存放低位元組,所以在強制轉換資料時不需要調整位元組的內容(註解:比如把int的4位元組強制轉換成short的2位元組時,就直接把int資料儲存的前兩個位元組給short就行,因為其前兩個位元組剛好就是最低的兩個位元組,符合轉換邏輯);

2. cpu做數值運算時從記憶體中依順序依次從低位到高位取資料進行運算,直到最後重新整理最高位的符號位,這樣的運算方式會更高效

由於不同的處理器可以配置成大端或者小端,使得不同主機之間的通訊變得複雜。

為此,網路協議指定了位元組序。tcp/ip協議棧採用大端位元組序,所以應用程式有時需要再處理器的位元組序與網路的位元組序之間進行轉換。

對於tcp/ip應用程式,提供了以下四個通用函式進行轉換:

#include 

uint16_t ntohs(n) // 16位資料型別網路位元組順序到主機位元組順序的轉換

uint16_t htons(n) // 16位資料型別主機位元組順序到網路位元組順序的轉換

uint32_t ntohl(n) // 32位資料型別網路位元組順序到主機位元組順序的轉換

uint32_t htonl(n) // 32位資料型別主機位元組順序到網路位元組順序的轉換

利用指標強制型別轉換

#include

int main()

else

return

0;

}

如果小端方式中(a佔至少兩個位元組的長度)則a所分配的記憶體最小位址那個位元組中就存著1,其他位元組是0;大端的話則1在i的最高位址位元組處存放。char是乙個位元組,所以強制將char型量p指向i則p指向的一定是i的最低位址,那麼就可以判斷p中的值是不是1來確定是不是小端。

intel的80×86系列晶元使用小端儲存模式

arm晶元預設採用小端,但可以切換為大端

mips晶元採用大端,但可以在大小端之間切換

在網路上傳輸的資料普遍採用的都是大端

C 與C C Socket網路通訊

c作為客戶端 傳送端 建立套接字 sersocket socket af inet,sock dgram,0 if sersocket invalid socket 繫結ip和埠 mysin.sin family af inet mysin.sin port htons cport mysin.si...

編碼 格式與網路通訊

資料的網路分層模型 網路通訊應用層資料處理 ui層 vo view object 資訊展示 文字 多 布局 使用者互動 dev css js model層 bean model,hashmap dictoary,image 網路介面層 json xml 網路傳輸 檔案存貯 bytes bytes 資...

C 網路通訊

c 網路通訊 一 伺服器端程式 10.17 1.建立伺服器端socket 1 使用socket類 建立伺服器socket物件 socket objs new socket 引數 使用ipendpoint類設定伺服器ip位址和埠號 或使用dns類 ipaddress serip ipaddress.p...