一、思维导图
二、主机字节序转换为网络字节序(大端存储)函数 htonl htons
网络字节序转换为主机字节序 函数 ntohl ntohs
#include<myhead.h>
int main(int argc, const char *argv[])
{
//主机字节序转换为网络字节序
int num_h = 0x12345678;//定义四字节整数
short value_h = 0x1234;//定义两字节整数
int num_n = htonl(num_h);//将num_h转换为网络字节序
int value_n = htons(value_h);//将value_h转换为网络字节序
printf("num_n = %#x,value_n = %#x\n",num_n,value_n);
//网络字节序转换为主机字节序
int num2_n = 0x89674523;//定义四字节整数
int value2_n = 0x6745;//定义两字节整数
int num2_h = ntohl(num2_n);//将num2_n转换为主机字节序
int value2_h = ntohs(value2_n);//将value2_n转换为主机字节序
printf("num2_h = %#x,value2_h = %#x\n",num2_h,value2_h);
return 0;
}
三、IP地址点分十进制转换为4字节无符号整数的无符号网络字节序 函数 inet_addr
4字节无符号整数的无符号网络字节序转换为点分十进制IP地址 函数 inet_ntoa
#include<myhead.h>
int main(int argc, const char *argv[])
{
struct in_addr addr;
char *ip_str;
//将点分十进制表示的IP地址存储到结构体中(4字节无符号整数的网络字节序)
addr.s_addr =inet_addr("192.168.117.93");
//输出网络字节序
printf("IP_n = %#x\n",addr.s_addr);
//将网络字节序转换为主机字节序
printf("IP_h:%#x\n",ntohl(addr.s_addr));
//将4字节无符号整数的网络字节序转换为点分十进制
ip_str = inet_ntoa(addr);
printf("IP:%s\n",ip_str);
return 0;
}