21xrx.com
2024-12-28 09:25:16 Saturday
登录
文章检索 我的文章 写文章
C++中IP地址转换实现
2023-06-24 14:12:02 深夜i     --     --
C++ IP地址 转换 实现

在 C++ 中进行 IP 地址转化是经常会用到的功能,实现起来也较为简单。本文将介绍如何在 C++ 中实现 IP 地址转换。

首先需要了解的是 IP 地址的存储方式。IP 地址通常被看做是一个 32 位无符号整数,每 8 位分别代表一个字节。因此我们可以用一个 unsigned int 类型的变量来表示一个 IP 地址。

IP 地址字符串转换为无符号整数

我们先来看如何将 IP 地址字符串转换为无符号整数的形式。例如,对于 IP 地址字符串 “192.168.1.1”,我们需要将其转换为 32 位无符号整数。代码如下:


unsigned int ipStrToInt(string ipAddress) {

  unsigned int result = 0;

  int sum = 0;

  for (int i = 0; i <= ipAddress.size(); i++) {

    if (i == ipAddress.size() || ipAddress[i] == '.')

      result = result << 8 | sum;

      sum = 0;

    | sum;

      sum = 0;

    } else {

      sum = sum * 10 + (ipAddress[i] - '0');

    }

  }

  return result;

}

这里的主要思路是遍历 IP 地址字符串,每遇到一个 ‘.’ 就将前面累加的数字转换为一个字节的形式添加到无符号整数中。例如,对于字符串 “192.168.1.1”,我们先将数字 192 转换为 0xC0,然后累加到 result 中,接着将累加的数字清零,接着将 168 转换为 0xA8,累加到 result 中,以此类推。

无符号整数转换为 IP 地址字符串

接下来我们来看如何将无符号整数转换为 IP 地址字符串的形式。例如,对于无符号整数 0xC0A80101,我们需要将其转换为字符串 “192.168.1.1”。代码如下:


string intToIpStr(unsigned int ipAddress) {

  string result = "";

  for (int i = 0; i < 4; i++) {

    int num = (ipAddress >> (8 * i)) & 0xFF;

    result = result + to_string(num) + ".";

  }

  result.pop_back();

  return result;

}

这里的主要思路是对无符号整数进行移位操作,并根据每个字节的值构造 IP 地址字符串。例如,在第一次循环中,我们将 ipAddress 右移 0 位(即不移动),然后通过与操作和掩码 0xFF 得到地址的第一个字节值 0xC0(即 192),接着将其加入结果字符串中。以此类推,将所有字节的值构造出 IP 地址字符串。最后将字符串末尾的 ‘.’ 去掉即可。

总结

本文介绍了在 C++ 中进行 IP 地址转换的实现方法,包括将 IP 地址字符串转换为无符号整数,以及将无符号整数转换为 IP 地址字符串。在实际开发过程中,我们可以使用这些方法来方便地进行 IP 地址的处理。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复