当前位置: 首页 > news >正文

C/C++ StringToAddress(字符串转 boost::asio::ip::address)

为什么不推荐 boost::asio::ip::address::from_string、boost::asio::ip::address::make_string 函数来把字符串转换为 ip 地址呢?

这是因为有平台、编译器兼容性,在 android 平台上面,使用这两个函数会导致崩溃问题,在一些 clang 编译器上面也会导致崩溃问题。

所以人们必须实现这两个函数。

    boost::asio::ip::address                                                StringToAddress(const char* s, boost::system::error_code& ec) noexcept;

    inline boost::asio::ip::address                                         StringToAddress(const std::string& s, boost::system::error_code& ec) noexcept { 
        return StringToAddress(s.data(), ec); 
    }

    inline boost::asio::ip::address                                         StringToAddress(const ppp::string& s, boost::system::error_code& ec) noexcept { 
        return StringToAddress(s.data(), ec); 
    }
 

源实现:

    // On the Android platform, call: boost::asio::ip::address::from_string function will lead to collapse, // Only is to compile the Release code and opened the compiler code optimization.boost::asio::ip::address StringToAddress(const char* s, boost::system::error_code& ec) noexcept {ec = boost::asio::error::invalid_argument;if (NULL == s || *s == '\x0') {return boost::asio::ip::address_v4::any();}struct in_addr addr4;struct in6_addr addr6;if (inet_pton(AF_INET6, s, &addr6) > 0) {boost::asio::ip::address_v6::bytes_type bytes;memcpy(bytes.data(), addr6.s6_addr, bytes.size());ec.clear();return boost::asio::ip::address_v6(bytes);}else if (inet_pton(AF_INET, s, &addr4) > 0) {ec.clear();return boost::asio::ip::address_v4(htonl(addr4.s_addr));}else {return boost::asio::ip::address_v4::any(); }}
}

http://www.lryc.cn/news/345880.html

相关文章:

  • 【玩转Google云】构建安全高效的电商系统:GCP VPC 网络规划指南
  • 【YOLO改进】换遍MMDET主干网络之Pyramid Vision Transformerv2(PVTv2)(基于MMYOLO)
  • 【漏洞复现】RuvarOA协同办公平台 WorkFlow接口处存在SQL注入
  • Kubelet containerd 管理命令 ctr常用操作
  • 求一个B站屏蔽竖屏视频的脚本
  • 用Github+HUGO搭建博客的经验教训
  • MongoDB4.4操作命令
  • 共享旅游革命:千益畅行卡的优势揭秘
  • 【doghead】mac: clion2024.1启动崩溃
  • 企业合规视角下的菜鸟网络与拼多多不正当竞争案
  • 如何在Java中处理日期和时间?介绍Java 8中的时间API
  • 24数维杯ABC题思路已更新!!!!
  • Fastapi+docker+tortoise-orm+celery
  • springBoot笔记五(pom.xml\yml)
  • 三生随记——耳机里的诅咒
  • 嵌入式学习<2>:EXTI、ADC、NVIC和AFIO
  • Nginx - server、listen、server_name和多服务请求处理(三)
  • C语言/数据结构——(相交链表)
  • 【二叉树算法题记录】二叉树的所有路径,路径总和——回溯
  • verilog基础语法之数据类型
  • ansible部署lamp架构
  • Java面试——MyBatis
  • Ubuntu-22.04使用systemd.mount挂载本地磁盘
  • 【Qt】界面定制艺术:光标(cursor)、字体(font)、提示(toolTip)、焦点(focusPolicy)与样式表(styleSheet)的深度探索
  • Python GraphQL服务器实现库之tartiflette使用详解
  • 面试官:请介绍类加载过程,什么是双亲委派模型?
  • mysql 细分
  • 数据驱动实战二
  • 解决参考文献自动生成标号,换行时自动缩进
  • 网络安全专业岗位详解+自学学习路线图