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

在C++中,IP地址字符串(如”192.168.1.1″)和整数之间的相互转换是一个常见的网络编程需求。这种转换通常用于简化IP地址的存储、比较或计算。下面介绍如何实现这两种格式的互转。
IP字符串转为整数
将点分十进制的IP字符串转换为32位无符号整数,本质是把每一段解析成字节,然后按大端序组合成一个整数。
使用std::istringstream配合std::getline逐段提取数字每段转换为整数后左移对应位数合并需验证每段是否在0~255范围内
示例代码:
#include #include #includeuint32_t ipToInteger(const std::string& ip) {uint32_t result = 0;std::istringstream iss(ip);std::string segment;int shift = 24;
while (std::getline(iss, segment, '.') && shift >= 0) { int num = std::stoi(segment); if (num 255) { throw std::invalid_argument("Invalid IP segment"); } result |= (static_cast(num) << shift); shift -= 8;}return result;
}
整数转为IP字符串
将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兼容)
在支持POSIX的系统上,可以使用inet_addr和inet_ntoa进行转换。
示例:
#include // Linux/macOS// #include // Windows// 字符串转整数(返回网络字节序)in_addr_t ipToInt(const char* ip) {return inet_addr(ip);}
// 整数转字符串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地址与整数互转方法的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1477721.html
微信扫一扫
支付宝扫一扫