三、位址形式的轉換函式
當儲存多位元組資料時,就涉及到位元組序的概念。高位位元組儲存在低位址為大端對齊,低位位元組儲存在低位址為小端對齊。
判斷系統為大端對齊還是小端對齊的方法:
#include
typedef
union
data;
intmain
(int argc,
char
*ar**)
else
if(ob.buf[0]
==0x02
&& ob.buf[1]
==0x01
)return0;
}
網路通訊為大端對齊。只有涉及到網路通訊時才需要考慮位元組序的問題,同一主機程序通訊不需要考慮。
#include
uint32_t htonl
(uint32_t hostint32)
;功能:
將32位主機位元組序資料轉換成網路位元組序資料
引數: hostint32:待轉換的32位主機位元組序資料
返回值:
成功:返回網路位元組序的值
#include
uint32_t ntohl
(uint32_t netint32)
;功能:
將32位網路位元組序資料轉換成主機位元組序資料
引數: uint32_t: unsigned
int netint32:待轉換的32位網路位元組序資料
返回值:
成功:返回主機位元組序的值
#include
uint16_t htons
(uint16_t hostint16)
;功能:
將16位主機位元組序資料轉換成網路位元組序資料
引數: uint16_t:unsigned
short
int hostint16:待轉換的16位主機位元組序資料
返回值:
成功:返回網路位元組序的值
#include
uint16_t ntohs
(uint16_t netint16)
;功能:
將16位網路位元組序資料轉換成主機位元組序資料
引數: uint16_t: unsigned
short
int netint16:待轉換的16位網路位元組序資料
返回值:
成功:返回主機位元組序的值
點分十進位制(字串):192.168.0.101 --> 四位元組資料
#include
intinet_pton
(int family,
const
char
*strptr,
void
*addrptr)
;功能:
將點分十進位制數串轉換成32位無符號整數
引數: family 協議族 af_inet
strptr 點分十進位制數串
addrptr 32位無符號整數的位址
返回值:
成功返回1 、 失敗返回其它
#include
const
char
*inet_ntop
(int family,
const
void
*addrptr,
char
*strptr, size_t len)
;功能:
將32位無符號整數轉換成點分十進位制數串
引數: family 協議族 af_inet
addrptr 32位無符號整數
strptr 點分十進位制數串
len strptr快取區長度
len的巨集定義
#define inet_addrstrlen 16
//for ipv4
#define inet6_addrstrlen 46
//for ipv6
返回值:
成功:則返回字串的首位址
失敗:返回null
網路程式設計 網路位元組序和位址位元組序轉化
網路位元組序是大端序,而記憶體位元組序是小端序 就像彙編學的內容一致 大端序 高位位元組存放到地位位址 小端序 高位位元組存放在高位位址 因此在位址傳輸時需要將位址進行轉化 short unsigned short htons unsigned short h to n,主機轉化成網路資料 s sh...
Linux網路程式設計 主機位元組序 與 網路位元組序
網域名稱轉換ip位址 首先需要理解大端模式與小端模式這兩個點 這兩種模式代表著資料在記憶體中是如何存放的,我們直到,乙個位元組能夠存放8位,如果是超過8位的資料該怎樣存放呢?如需要存放資料 0x12345678 不難看出,大端模式也就是高位優先存放,小端模式也就是低位優先存放。下面學習兩類函式 ht...
TCP IP網路程式設計之位元組序和網路位元組序
一 概要 二 簡介 在此之前我們需要了解清楚幾個概念。cpu架構 人們常說的x86 x64是一種架構,但是他有32位的和64位的。32位的叫x86 後來出現基於它的64位版,就叫x64。作業系統位數 64位的系統是基於64位處理器而來的,所以64位的系統能在64位的處理器上執行,但是不能在32的處理...