网络字节序与IP字符串
1 IP字符串转换成网络字节序
1.1 inet_addr函数
a. 头文件
需额外添加以下头文件
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
b. 函数原型
in_addr_t inet_addr(const char *cp);
in_addr_t:函数返回值类型,本质上是无符号32位整型类型。
inet_addr:函数名。
const char *cp:参数,即一个指向字符数组的指针。
c. 功能
将cp指向的IP字符串转成网络字节序。
将用点分十进制字符串表示的IPv4地址转化为用网络字节序整数表示的IPv4地址。
d. 返回值
成功返回网络字节序,失败返回INADDR_NONE [0xffffffff]。
e. 注意点
不能识别255.255.255.255。
#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int main(int argc, const char *argv[])
{
in_addr_t net_ip;
char buf[100] = "192.168.34.214";
net_ip = inet_addr(buf);
if(net_ip == INADDR_NONE)
{
perror("Fail to inet_addr");
return -1;
}
printf("net_ip = %#x\n",net_ip);
return 0;
}
1.2 inet_aton函数
a. 头文件
需额外添加以下头文件
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
b. 函数原型
int inet_aton(const char *cp, struct in_addr *inp);
int:函数返回值类型。
inet_aton:函数名。
const char *cp:IP字符串首地址。
struct in_addr *inp:存放网络字节序的地址。
c. 功能
将cp指向的IP字符串转成网络字节序并保存到结构体的地址中。
d. 返回值
成功返回非0,失败返回0。
#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int main(int argc, const char *argv[])
{
struct in_addr net_ip;
int ret = 0;
char buf[100] = "192.168.34.214";
ret = inet_aton(buf,&net_ip);
if(ret == 0)
{
perror("Fail to inet_addr");
return -1;
}
printf("net_ip : %#x\n",net_ip.s_addr);
return 0;
}
2. 网络字节序转IP字符串
a. 头文件
需额外添加以下头文件
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
b. 函数原型
char *inet_ntoa(struct in_addr in)
char *:函数返回值类型,直接返回IP字符串首地址。
inet_ntoa:函数名。
struct in_addr in:IP网络字节序。
c. 功能
将网络字节序转换成IP字符串。
32位的网络字节顺序的IP信息转换成点分十进制的字符串方式
d. 返回值
成功返回IP字符串首地址,失败返回NULL。
#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int main(int argc, const char *argv[])
{
struct in_addr net_ip;
int ret = 0;
char *host_ip = NULL;
char buf[100] = "192.168.34.214";
ret = inet_aton(buf,&net_ip);
if(ret == 0)
{
perror("Fail to inet_addr");
return -1;
}
printf("net_ip : %#x\n",net_ip.s_addr);
host_ip = inet_ntoa(net_ip);
if(host_ip == NULL)
{
perror("Fail to inet_ntoa");
return -1;
}
printf("host_ip: %s\n",host_ip);
return 0;
}