用C++如何将一个整数转换成一个IP地址?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用C++如何将一个整数转换成一个IP地址?相关的知识,希望对你有一定的参考价值。
网上看到一段程序,没看懂,求大大们指教!
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 *) &ip其实就是把这个int型的指针转成char型的指针。这样,一个就可以转成4个了。
那ipv4 的ip地址一共4位,所以取不同的位上的值就+0, +1,+2,+3 就可以了。追问
多谢解答,但还想弱弱的问句,这个程序里十进制怎么转换成二进制的呢?(char*)&ip就可以了?
追答十进制与二进制只是表现成字符串的时候表达不同,但在内存块上都一样的。
计算机是二进制的语言(量子计算机有望打破这个),所以计算机识别的也只是二进制数,十进制数只是因为人比较容易看懂。
不知道你明白没有。
(char*)&ip+0 ==>> 01111111
(char*)&ip+1 ==>> 00000000
(char*)&ip+2 ==>> 00000000
(char*)&ip+3 ==>> 00000001
char变量大小是一个字节,所以指针+1是跳一个字节追问
没搞明白啊,就是这个程序里十进制怎么转换成二进制的呢?(char*)&ip就可以了?
追答127.0.0.1它在计算机里面就是以二进制形式表示的,不用去转换.直接挨个字节挨个字节读就行了...
ip地址与整数转换
问题:
例如,ip地址为10.0.3.193,把每段拆分成一个二进制形式组合起来为00001010 00000000 00000011 11000001,然后把这个二进制数转变成十进制整数就是167773121。
原文描述:
- 给你一个IP4的地址,请转成十进制整数 (2021-03 腾讯-PCG-前端)
- 手撕算法: ip地址转整数 (2021-03 腾讯-TEG-后端)
- ip字符串转整型(2021-02 快手-效率工程-后端)
思路:使用位运算实现,哪一位有1就对应位置的n次放,一个ip地址段有8位,32位刚好。故,10左移24位,0左移动16位,3左移动8位,193移动0位,最后求和,通过按位或实现。
代码:
def ipToInt(ip): ipList = ip.split(\'.\') res = 0 for i,n in zip(ipList, [24, 16, 8, 0]): res |= int(i)<<n return res
整数转化为ip:将每一个ip地址段(右移)同255做与运算,即可获取到整数值
以上是关于用C++如何将一个整数转换成一个IP地址?的主要内容,如果未能解决你的问题,请参考以下文章
在C语言中,如何将字符串“192.168.1.1”转换成MAC地址或IP地址?
华为OD机试模拟题用 C++ 实现 - IPv4 地址转换成整数(2023.Q1)