用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),
是什么意思,怎么实现的转化呢?
展开
 我来答
peacexf
2012-10-28 · TA获得超过293个赞
知道小有建树答主
回答量:476
采纳率:100%
帮助的人:406万
展开全部
ip是个int型,对于32位机器来说占4byte。char是一个byte。
有了这个知识再看
(char *) &ip其实就是把这个int型的指针转成char型的指针。这样,一个就可以转成4个了。
那ipv4 的ip地址一共4位,所以取不同的位上的值就+0, +1,+2,+3 就可以了。
追问
多谢解答,但还想弱弱的问句,这个程序里十进制怎么转换成二进制的呢?(char*)&ip就可以了?
追答
十进制与二进制只是表现成字符串的时候表达不同,但在内存块上都一样的。
计算机是二进制的语言(量子计算机有望打破这个),所以计算机识别的也只是二进制数,十进制数只是因为人比较容易看懂。
不知道你明白没有。
环保之安G
2012-10-28 · 超过15用户采纳过TA的回答
知道答主
回答量:64
采纳率:0%
帮助的人:34.8万
展开全部
例如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就可以了?
追答
127.0.0.1它在计算机里面就是以二进制形式表示的,不用去转换.直接挨个字节挨个字节读就行了...
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式