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

2021-05-22 18:15:37 字數 1233 閱讀 5504

1. 

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

//以下是從ip.h和tcp.h取的,但bsd和linux用的名稱有些不一樣主要是tcp不一樣/*

struct ip

;struct tcphdr;*/

我所理解的big序和little序的區別:

1:存整數的時候

uint32_t a=1574; //1574=0x626

big序:00000110 00100110 也就是0x0626

little序存的時候是(按bit):00100110 00000110 也就是0x2606

通過函式(

linux/byteorder/generic.h

中定義的):

unsigned long int htonl (unsigned long int hostlong);

unsigned short int htons (unsigned short int hostshort);

unsigned long int ntohl (unsigned long int netlong);

unsigned short int ntohs (unsigned short int netshort);

即可實現主機序到網路序的轉換,實際上的函式就是先判斷cpu是否是little序的,不是不執行任何操作,因為big序本來就是網路序,是little序的話就以位元組為單位執行前後顛倒就行了。

另外用注意,數字所佔位數小於或等於乙個位元組(8 bits)時,不要用htons轉換。這是因為對於主機來說,大小尾端的最小單位為位元組(byte)。

2:用位段分配空間時:

big序:

unsigned int ip_v:4; // version

unsigned int ip_hl:4; // header length

ip_v=4;

ip_hl=5;

則記憶體實際存法是:01000101

因為big序是從前面開始分配的

little序:

unsigned int ip_hl:4; //little-endian ip頭長度(單位為32位)4位

unsigned int ip_v:4; //版本號4 ip4用4

ip_v=4;

ip_hl=5;

則記憶體實際存法是:01000101

因為little

序是從前後開始分配的。

這樣就實現了傳送包的時候統一以網路序傳送。

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

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

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

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

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

網路程式設計中經常用到的網路位元組序和主機位元組序的轉換,比如ip 字串 暫時只討論ipv4 是以三個點號和四個數字組成,並以點號相分隔的字串。比如說,ip是225.224.223.222,那麼整數是不是就是 0xfffefdfc呢?答案是不一定。雖然此ip位址在記憶體中的儲存順序從左至右依次是,f...