C++,IP地址整数和字符串形式的互相转换方法

本文介绍了如何在C++中实现IP地址在整数和字符串之间的相互转换,并提供了两种将整数形式的IP地址转换回字符串形式的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

解析转换程序通信消息体中IP地址时,经常会将其在整数和字符串两种方式转换,于是将转换方式总结一下。

#include <iostream>
#include <arpa/inet.h>
#include <stdio.h>
using namespace std;
int main()
{
  //将字符串表示的IP转换为整数IP
  int dwAddr = inet_addr("127.0.0.1");
  cout << "NO1 :IP的整数形式 " << dwAddr <<endl;
 
  //将整数转换为字符串形式的IP形式表示,方法一
  struct in_addr inAddr;
  inAddr.s_addr = dwAddr;
  cout << "NO2: IP的字符串形式 " <<  inet_ntoa(inAddr) << endl;
 
  //将整数转换为字符串形式的IP形式表示,方法二
  unsigned char *pch = (unsigned char*)&dwAddr;
  char szIPAddr[64] = {0};
  sprintf(szIPAddr, "%d.%d.%d.%d", *pch, *(pch+1), *(pch+2),*(pch+3));
  cout << "NO3: IP的字符串形式 " << szIPAddr << endl;
 
   return 1;
}

打印输出:

NO1 :IP的整数形式 16777343
NO2: IP的字符串形式 127.0.0.1
NO3: IP的字符串形式 127.0.0.1

要将整数形式IP地址转换字符串形式,通常需要将一个32位的整数分解为四个8位的部分,每个部分代表IP地址的一个字节。由于网络协议中通常使用大端序(Big-endian)表示IP地址,因此在转换时需要考虑字节序的问题。 以下是一个使用C++实现的示例代码: ```cpp #include <iostream> #include <string> std::string IntToIP(unsigned int ip) { std::string result; // 分解为四个字节 unsigned char bytes[4]; bytes[0] = (ip >> 24) & 0xFF; bytes[1] = (ip >> 16) & 0xFF; bytes[2] = (ip >> 8) & 0xFF; bytes[3] = ip & 0xFF; // 拼接为字符串IP格式 result = std::to_string(bytes[0]) + "." + std::to_string(bytes[1]) + "." + std::to_string(bytes[2]) + "." + std::to_string(bytes[3]); return result; } int main() { unsigned int ipInt = 1713350848; // 对应IP地址192.168.31.102 std::string ipStr = IntToIP(ipInt); std::cout << "IP地址: " << ipStr << std::endl; // 输出:IP地址: 192.168.31.102 return 0; } ``` ### 代码解析 1. **分解整数**:将32位整数分为四个8位的部分。通过位移操作按位与操作,提取每个字节的值。 - `bytes[0] = (ip >> 24) & 0xFF;` 提取最高8位。 - `bytes[1] = (ip >> 16) & 0xFF;` 提取次高8位。 - `bytes[2] = (ip >> 8) & 0xFF;` 提取中间8位。 - `bytes[3] = ip & 0xFF;` 提取最低8位 [^2]。 2. **转换为字符串**:使用`std::to_string`将每个字节转换为字符串,并通过点号`.`拼接成标准的IP地址格式 [^1]。 ### 注意事项 - **字节序问题**:在某些系统中,整数的存储方式可能与网络字节序不同(例如小端序)。如果系统使用小端序,则需要手动调整字节顺序,以确保生成的IP地址与网络协议一致。 - **范围检查**:确保输入的整数在合法范围内(即0到2^32-1之间),否则可能导致无效的IP地址。 通过上述方法,可以高效地将整数形式IP地址转换字符串格式,并确保结果符合标准IP地址的表示方式。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值