字节序分为:大端字节序 和 小端字节序
大端字节序:指一个整数的高位字节存储在内存的低地址处,低位字节存储在内存的高地址处。
小端字节序:指整数的高位字节存储在内存的高地址处,而低位字节则存储在内存的低地址处。
现代PC大多采用小端字节序,小端字节序又称为主机字节序。
大端字节序也称为网络字节序。
当格式化的数据在两台使用不同字节序的主机之间直接传递时,接收端必然会解释错误传递的数据。
解决方法是:
发送端总是把要发送额数据转化成大端字节序数据后再发送,而接收端知道对方传过来的数据总是采用大端字节序,
所以接收端可以根据自身采用的字节序决定是否对接收到的数据进行转换。
提供主机字节序和网络字节序之间转换的四个函数
#include<netinet/in.h>
主机字节序转网络字节序(一般用来转换IP地址):unsigned long int htonl(unsigned long int hostlong);
主机字节序转网络字节序(一般用来转换端口号):unsigned short int htons(unsigned short int hostsort);
网络字节序转主机字节序(一般用来转换IP地址):unsigned long int ntohl(unsigned long int netlong);
网络字节序转主机字节序(一般用来转换端口号):unsigned short int ntohs(unsigned short int netshort);
struct sockaddr_in saddr,caddr; //AF_INET域地址结构
memset(&saddr,0,sizeof(saddr)); //清空变量中的内容
saddr.sin_family = AF_INET; //TCP/IPV4协议族
saddr.sin_port = htons(80); //主机字节序转网络字节序
saddr.sin_addr.s_addr = inet_addr("192.168.1.113"); //将点分十进制字符串表示的IPv4地址转换成用网络字节序整数表示的ipv4地址。