当前位置: 技术问答>linux和unix
请问内核中如何将IP地址转换成字符串?
来源: 互联网 发布时间:2016-04-30
本文导语: 我是想在以模块导入到内核的程序里面得到一个IP地址,之后把IP地址以字符串的形式写在文件里面 | in_adr.s_addr = ntohl(addr0); strcpy( ip_str, inet_ntoa(in_adr) ); ============================================ 应用层的做...
我是想在以模块导入到内核的程序里面得到一个IP地址,之后把IP地址以字符串的形式写在文件里面
|
in_adr.s_addr = ntohl(addr0);
strcpy( ip_str, inet_ntoa(in_adr) );
============================================
应用层的做法,你看一下内核中是否有此函数,如果没有,就只能自己写了,其实很简单的:
举个例子(假定你收到的地址是addr0):
char *p = &addr0;
char ipAddress[20];
sprintf(ipAddress,"%d.%d.%d.%d",p[0],p[1],p[2],p[3]);
如果你发现你的ipAddress中的序顺相反,那么就把最后一句改成:
sprintf(ipAddress,"%d.%d.%d.%d",p[3],p[2],p[1],p[0]);
PS:本人主要是由于懒,所以没去仔细想字节序的问题,你就只有自己试两次了
strcpy( ip_str, inet_ntoa(in_adr) );
============================================
应用层的做法,你看一下内核中是否有此函数,如果没有,就只能自己写了,其实很简单的:
举个例子(假定你收到的地址是addr0):
char *p = &addr0;
char ipAddress[20];
sprintf(ipAddress,"%d.%d.%d.%d",p[0],p[1],p[2],p[3]);
如果你发现你的ipAddress中的序顺相反,那么就把最后一句改成:
sprintf(ipAddress,"%d.%d.%d.%d",p[3],p[2],p[1],p[0]);
PS:本人主要是由于懒,所以没去仔细想字节序的问题,你就只有自己试两次了
|
6 楼正解
#define NIPQUAD(addr)
((unsigned char *)&addr)[0],
((unsigned char *)&addr)[1],
((unsigned char *)&addr)[2],
((unsigned char *)&addr)[3]
#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]
#define NIPQUAD_FMT "%u.%u.%u.%u"