1、网络字节序:是TCP/IP中一种固定好的数据表示格式,它与具体的CPU,操作系统,传输方式无关,从而可以保证数据在不同主机之间传输时能够兼容。
2、主机字节序:即大端(Big Endian)与小端(Little Endian)模式;由CPU和硬件的设置方式相关。
3、为了进行转换 bsd socket提供了转换的函数 有下面四个
(BSD Socket 是UNIX系统中通用的网络接口,它不仅支持各种不同的网络类型,而且也是一种内部进程之间的通信机制)
①htons 把unsigned short类型从主机序转换到网络序(host to network short)
②htonl 把unsigned long类型从主机序转换到网络序(host to network long)
③ntohs 把unsigned short类型从网络序转换到主机序(network to host short)
④ntohl 把unsigned long类型从网络序转换到主机序(network to host long)
注意1:在使用Little Endian的系统中, 这些函数会对字节序进行转换 ,将字节序转换为Big Endian
注意2:在使用Big Endian类型的系统中,这些函数会定义成空宏
h代表host,n代表network,s代表short,l代表long。如果长整型占用64位,htonl和ntohl操作的仍然是32位的值。
源自berkeley的字节操纵函数:
地址转换函数:
inet_aton将strptr所指c字符串转换成一个32位的网络字节序二进制值,并通过addrptr指针来存储。成功返回1,否则返回0.
inet_ntoa将一个32位的网络字节序二进制IPV4地址转换成相应的点分十进制数串。由于返回值所指向的字符串驻留在静态内存中,所以该函数是不可重入的。
这两个函数的family参数可以是AF_INET、AF_INET6。如果以不支持的地址族作为这个参数,返回一个错误,erron置为EAFNOSUPPORT。
inet_pton尝试转换strptr所指字符串,并将二进制结果存放在addrptr中,成功返回1,失败返回0.
inet_ntop进行相反的转换,从数值格式(addrptr)转换到表达格式(strptr)。len参数是目标存储单元的大小,以免溢出其调用者的缓冲区。调用陈宫时strptr就是这个函数的返回值
一般有如下定义:
标签:转换,字节,主机,函数,网络,network From: https://www.cnblogs.com/dongruan/p/16758476.html