用C++如何将一个整数转换成一个IP地址?
网上看到一段程序,没看懂,求大大们指教!char*int2ipstr(constintip,char*buf){sprintf(buf,"%u.%u.%u.%u",(uc...
网上看到一段程序,没看懂,求大大们指教!
char * int2ipstr (const int ip, char *buf)
{
sprintf (buf, "%u.%u.%u.%u",
(uchar) * ((char *) &ip + 0),
(uchar) * ((char *) &ip + 1),
(uchar) * ((char *) &ip + 2), (uchar) * ((char *) &ip + 3));
return buf;
}
主要解释下
(uchar) * ((char *) &ip + 0),
(uchar) * ((char *) &ip + 1),
是什么意思,怎么实现的转化呢? 展开
char * int2ipstr (const int ip, char *buf)
{
sprintf (buf, "%u.%u.%u.%u",
(uchar) * ((char *) &ip + 0),
(uchar) * ((char *) &ip + 1),
(uchar) * ((char *) &ip + 2), (uchar) * ((char *) &ip + 3));
return buf;
}
主要解释下
(uchar) * ((char *) &ip + 0),
(uchar) * ((char *) &ip + 1),
是什么意思,怎么实现的转化呢? 展开
2个回答
展开全部
ip是个int型,对于32位机器来说占4byte。char是一个byte。
有了这个知识再看
(char *) &ip其实就是把这个int型的指针转成char型的指针。这样,一个就可以转成4个了。
那ipv4 的ip地址一共4位,所以取不同的位上的值就+0, +1,+2,+3 就可以了。
有了这个知识再看
(char *) &ip其实就是把这个int型的指针转成char型的指针。这样,一个就可以转成4个了。
那ipv4 的ip地址一共4位,所以取不同的位上的值就+0, +1,+2,+3 就可以了。
追问
多谢解答,但还想弱弱的问句,这个程序里十进制怎么转换成二进制的呢?(char*)&ip就可以了?
追答
十进制与二进制只是表现成字符串的时候表达不同,但在内存块上都一样的。
计算机是二进制的语言(量子计算机有望打破这个),所以计算机识别的也只是二进制数,十进制数只是因为人比较容易看懂。
不知道你明白没有。
展开全部
例如127.0.0.1他对应的二进制表示是01111111.00000000.00000000.00000001
(char*)&ip+0 ==>> 01111111
(char*)&ip+1 ==>> 00000000
(char*)&ip+2 ==>> 00000000
(char*)&ip+3 ==>> 00000001
char变量大小是一个字节,所以指针+1是跳一个字节
(char*)&ip+0 ==>> 01111111
(char*)&ip+1 ==>> 00000000
(char*)&ip+2 ==>> 00000000
(char*)&ip+3 ==>> 00000001
char变量大小是一个字节,所以指针+1是跳一个字节
追问
没搞明白啊,就是这个程序里十进制怎么转换成二进制的呢?(char*)&ip就可以了?
追答
127.0.0.1它在计算机里面就是以二进制形式表示的,不用去转换.直接挨个字节挨个字节读就行了...
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询