位元組序,位址轉換
位元組序:
是指多位元組資料在計算機記憶體中儲存或者網路傳輸時各位元組的儲存順
序。兩種格式:大端和小端。
小端:高位址存放高位數,低位址存放低位數
大端:高位址存放低位數,低位址存放高位數
驗證主機的位元組序
#include
int main()
輸出結果為
12時 為大端
輸出結果為
34時 為小端
算術運算與記憶體操作運算:算術運算是不改變被運算資料的位元組序
ip位址的位元組序:ip
位址的整數值,自
ip位址生成的時刻起,就一定是網路位元組序的(大端
)位元組序轉換函式:os
一般都提供
htons
、htonl
、ntohs
、ntohl
這四個位元組序操作函式
#include
主機位元組序轉換成網路位元組序函式:
u_longhtonl(u_long hostlongvalue); 32位
u_shorthtons(u_short hostshortvalue); 16位
網路位元組序轉換成主機位元組序函式:
u_longntohl(u_long netlongvalue); 32位
u_shorthotns(u_short netshortvalue); 16位
位址轉換函式
#include將點分十進位制數串轉換成
32位無符號整數
intinet_pton(int family, const char *strptr, void *addrptr);
family
:協議族
(af_inet
、af_inet6
、pf_packet等)
,常用af_inet
strptr
:點分十進位制數串
addrptr:32
位無符號整數的位址
成功返回
1,失敗返回其他將32
位無符號整數轉換成點分十進位制數串
constchar *inet_ntop( int family, const void *addrptr, char*strptr, size_t len );
family
:協議族
(af_inet
、af_inet6
、pf_packet
等)
,常用af_inet
addrptr:32位無符號整數
strptr:點分十進位制數串
len:strptr
快取區長度
len的巨集定義
#defineinet_addrstrlen 16 // for ipv4
#defineinet6_addrstrlen 46 // for ipv6
成功返回首位址,否則為null
linux位元組序轉換函式和位址轉換函式
剛才閱讀 的時候看到了乙個位元組排序函式,一時想不起具體用法了。想想學習linux下的網路程式設計也不少時間了,這些位元組排序和轉換的函式還是不太清楚,容易混淆。今天索性把這方面的知識彙總一下,爭取以後能夠熟練的認識和運用。位元組順序函式 小端位元組序 將低序位元組儲存在起始位址。linux 大端位...
python 網路位元組序轉換 網路位元組序
一.位元組序 位元組序是由於不同的主處理器和作業系統,對大於乙個位元組的變數在記憶體中的存放順序不同而產生的。位元組序通常有大端位元組序列和小端位元組序兩種分類方法。由於主機的千差萬別,主機的位元組序不能做到統一,但是網路上傳輸的數值,它們有統一的規定。網路位元組序 是指多位元組變數在網路傳輸時的表...
主機位元組序和網路位元組序轉換
為什麼要轉換?主機位元組序 整數在記憶體中儲存的順序,不同的處理器對應不容的模式 little endian 將低序位元組儲存在起始位址 big endian 將高序位元組儲存在起始位址 網路位元組序 整數在網路中的傳送順序 網路位元組順序是tcp ip中規定好的一種資料表示格式,它與具體的cpu型...