網路程式設計時的位元組順序變換,位址變換

2021-06-23 04:54:16 字數 1185 閱讀 6744

不同的

cpu有不同的位元組序型別

這些位元組序是指整數在記憶體中儲存的順序

這個叫做主機序

最常見的有兩種 1

.little endian 2

.big endian

le little-endian

最符合人的思維的位元組序

位址低位儲存值的低位

位址高位儲存值的高位

怎麼講是最符合人的思維的位元組序,是因為從人的第一觀感來說

低位值小,就應該放在記憶體位址小的地方,也即記憶體位址低位

反之,高位值就應該放在記憶體位址大的地方,也即記憶體位址高位

be big-endian

最直觀的位元組序

位址低位儲存值的高位

位址高位儲存值的低位

為什麼說直觀,不要考慮對應關係

只需要把記憶體位址從左到右按照由低到高的順序寫出

把值按照通常的高位到低位的順序寫出

兩者對照,乙個位元組乙個位元組的填充進去 

寫網路程式的時候經常會遇到網路位元組順序和主機位元組順序不一致的情況,這時就會用到下面這幾個函式

htons(),htonl,ntohs(),ntohl()轉換函式

htons

把unsigned short

型別從主機序轉換到網路序

htonl

把unsigned long

型別從主機序轉換到網路序

ntohs

把unsigned short

型別從網路序轉換到主機序

ntohl

把unsigned long

型別從網路序轉換到主機序 注:

1、網路與主機位元組轉換函式

:htons ntohs htonl ntohl (s

就是short l

是long h

是host n

是 network)

2、不同的

cpu上執行不同的作業系統,位元組序也是不同的,

另外還有兩個函式在socket程式設計的時候會遇到

inet_ntoa();

將網路位址轉換

成「.」點隔的字串格式。

inet_aton();

inet_aton是乙個改進的方法來將乙個字串ip位址轉換為乙個32位的網路序列ip位址

inet_addr()的功能是將乙個點分十進位制的ip轉換成乙個長整數型數

網路程式設計 網路位元組序和位址位元組序轉化

網路位元組序是大端序,而記憶體位元組序是小端序 就像彙編學的內容一致 大端序 高位位元組存放到地位位址 小端序 高位位元組存放在高位位址 因此在位址傳輸時需要將位址進行轉化 short unsigned short htons unsigned short h to n,主機轉化成網路資料 s sh...

linux網路程式設計 網路位元組序 位址轉換

endian 這個詞出自 格列佛遊記 小人國的內戰就源於吃雞蛋時是究竟從大頭 big endian 敲開還是從小頭 little endian 敲開,由此曾發生過六次叛亂,其中乙個皇帝送了命,另乙個丟了王位。我們一般將 endian 翻譯成 位元組序 將 big endian 和 little en...

Linux網路程式設計 位元組序 位址轉換函式

1 談到位元組序,那麼會有朋友問什麼是位元組序 很簡單 例如乙個16位的整數,由2個位元組組成,8位為一位元組,有的系統會將高位元組放在記憶體低的位址上,有的則將低位元組放在記憶體高的位址上,所以存在位元組序的問題。2 那麼什麼是高位元組 低位元組?也相當簡單 乙個16進製制整數有兩個位元組組成,例...