用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),
是什么意思,怎么实现的转化呢?

ip是个int型,对于32位机器来说占4byte。char是一个byte。
有了这个知识再看
(char *) &ip其实就是把这个int型的指针转成char型的指针。这样,一个就可以转成4个了。
那ipv4 的ip地址一共4位,所以取不同的位上的值就+0, +1,+2,+3 就可以了。追问

多谢解答,但还想弱弱的问句,这个程序里十进制怎么转换成二进制的呢?(char*)&ip就可以了?

追答

十进制与二进制只是表现成字符串的时候表达不同,但在内存块上都一样的。
计算机是二进制的语言(量子计算机有望打破这个),所以计算机识别的也只是二进制数,十进制数只是因为人比较容易看懂。
不知道你明白没有。

参考技术A 例如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它在计算机里面就是以二进制形式表示的,不用去转换.直接挨个字节挨个字节读就行了...

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地址?

C# 中 将IP字符串转换为整型

Python—IP地址与整数之间的转换

华为OD机试模拟题用 C++ 实现 - IPv4 地址转换成整数(2023.Q1)

在C语言中,如何将字符串“192.168.1.1”转换成MAC地址或IP地址?

华为机试真题 C++ 实现IPv4地址转换成整数