将十进制ip地址转化为字符串点分十进制ip地址
在使用linux下udp的socket时,发现服务端不需要连接客户端,并且 ,每次接收数据时,都需要预先定义一个变量来保存发送数据端(客户端)ip地址,其中系统调用里面的ip地址是一个入参:
#include <sys/socket.h>
ssize_t recvfrom(int sockfd, void *buff, size_t lenght, int flags, struct sockaddr *src_addr, socklen_t *addrlen)
Returns number of bytes received, 0 on EOF, or -1 on error
那么该ip地址就是一个网络序的ip地址,获取到之后,本人想把它以点分十进制的方式打印出来,进过测试,如下方法可行
#include <stdio.h>
#include <iostream>
#include <arpa/inet.h>
using namespace std;
#define NIPQUAD_FMT "%u.%u.%u.%u"
#define NIPQUAD(addr) \
((unsigned char *)&addr)[0], ((unsigned char *)&addr)[1], ((unsigned char *)&addr)[2], ((unsigned char *)&addr)[3]
int main() {
unsigned int ip;
ip = htonl(-1062707941);
printf("ip = " NIPQUAD_FMT "\n", NIPQUAD(ip));
这里的-1062707941是通过一个udp服务端接收客户端所取得ip地址,然后转为主机序。由于这里的NIPQUAD的参数是网络序,因此这里再次将ip转为网络序
结果如下: