網路位元組序和主機位元組序

2021-06-16 10:38:48 字數 761 閱讀 5843

網路程式設計中經常用到的網路位元組序和主機位元組序的轉換,比如ip 字串(暫時只討論ipv4),是以三個點號和四個數字組成,並以點號相分隔的字串。比如說,ip是225.224.223.222,那麼整數是不是就是 0xfffefdfc呢?答案是不一定。雖然此ip位址在記憶體中的儲存順序從左至右依次是,」ff」,「fe」, 「fd」, 「fc」兩個位元組。但是這個儲存順序代表的實際數值是何值,得看cpu體系架構,是 little-endian 還是 big-endian.如果是前者,就表示高位存在右邊。後者,高位存在左邊,所以,整數 0xfffefdfc 的儲存情況如下:

0xff 0xfe 0xfd 0xfc # big-endian

0xfc 0xfd 0xfe 0xff # little-endian

一般 intel 的 cpu 是 little-endian, 所以ip 225.224.223.222 所對應的整數應該是:0xfcfdfeff。0xfffefdfc 對應的ip則是:222.223.224.225。

轉化的方法如下,輸入是點分的ip位址格式(如a.b.c.d)的字串,從該字串中提取出每一部分,轉換為ulong,假設得到4個ulong型的a,b,c,d,

uladdress(ulong型)是轉換後的結果,

uladdress = d<<24 + c<<16 + b<<8 + a(網路位元組序),即inet_addr(const char *)的返回結果

另外,我們也可以得到把該ip轉換為主機序的結果,轉換方法一樣

a<<24 + b<<16 + c<<8 + d

網路位元組序和主機位元組序

不同的 cpu有不同的位元組序型別 這些位元組序是指整數在記憶體中儲存的順序 這個叫做主機序 最常見的有兩種1 little endian2 big endian le little endian 最符合人的思維的位元組序 位址低位儲存值的低位 位址高位儲存值的高位 怎麼講是最符合人的思維的位元組序...

主機位元組序和網路位元組序

1.主機位元組序和網路位元組序1 以下是從ip.h和tcp.h取的,但bsd和linux用的名稱有些不一樣主要是tcp不一樣 struct ip struct tcphdr 我所理解的big序和little序的區別 1 存整數的時候 uint32 t a 1574 1574 0x626 big序 0...

網路位元組序和主機位元組序

1.網路傳資料的時候是乙個位元組乙個位元組的傳.字串裡的每乙個字元只用乙個位元組 前面的就先傳 接收的後再解釋的時候也是按順序來 所以字串沒有網路位元組序的分別.2.網路位元組序預設是大端,也就是說任何機器如果收到乙個 int型的 4個位元組,那麼這個機器就會認為第乙個位元組是最高位,最後乙個位元組...