IP字符串与整数互转可通过手动解析或系统函数实现:手动方式使用istringstream分割并移位组合,或通过位操作拆分整数;系统函数如inet_addr和inet_ntoa(推荐inet_pton/inet_ntop)更简洁但具平台依赖性。

在C++中,IP地址字符串(如"192.168.1.1")和整数之间的相互转换是一个常见的网络编程需求。这种转换通常用于简化IP地址的存储、比较或计算。下面介绍如何实现这两种格式的互转。
将点分十进制的IP字符串转换为32位无符号整数,本质是把每一段解析成字节,然后按大端序组合成一个整数。
std::istringstream配合std::getline逐段提取数字示例代码:
#include <iostream>
#include <sstream>
#include <string>
<p>uint32_t ipToInteger(const std::string& ip) {
uint32_t result = 0;
std::istringstream iss(ip);
std::string segment;
int shift = 24;</p><pre class="brush:php;toolbar:false;"><pre class="brush:php;toolbar:false;">while (std::getline(iss, segment, '.') && shift >= 0) {
int num = std::stoi(segment);
if (num < 0 || num > 255) {
throw std::invalid_argument("Invalid IP segment");
}
result |= (static_cast<uint32_t>(num) << shift);
shift -= 8;
}
return result;}
将32位整数拆解为四个8位字节,再拼接成点分格式的字符串。
立即学习“C++免费学习笔记(深入)”;
std::to_string转为字符串并拼接示例代码:
std::string integerToIp(uint32_t num) {
std::string ip;
for (int i = 24; i >= 0; i -= 8) {
ip += std::to_string((num >> i) & 0xFF);
if (i > 0) ip += ".";
}
return ip;
}
在支持POSIX的系统上,可以使用inet_addr和inet_ntoa进行转换。
示例:
#include <arpa/inet.h> // Linux/macOS
// #include <winsock2.h> // Windows
<p>// 字符串转整数(返回网络字节序)
in_addr_t ipToInt(const char* ip) {
return inet_addr(ip);
}</p><p>// 整数转字符串
std::string intToIp(in_addr_t num) {
struct in_addr addr;
addr.s_addr = num;
return inet_ntoa(addr);
}
注意:inet_addr已弃用,推荐使用inet_pton;inet_ntoa不是线程安全的,建议用inet_ntop替代。
基本上就这些。手动实现更可控,系统函数更简洁但依赖平台。根据项目需求选择合适方式即可。
以上就是c++++怎么将ip地址字符串和整数互转_ip地址与整数互转方法的详细内容,更多请关注php中文网其它相关文章!
c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号