`
mylove2060
  • 浏览: 335924 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Boost - C++的转化数字IP到字符串IP

阅读更多
*    INET_ATON(expr)

给出一个作为字符串的网络地址的"点地址"(如127.0.0.1)表示,返回一个代表该地址数值的整数。地址可以是4或8比特地址。

mysql> SELECT INET_ATON('209.207.224.40');

        -> 3520061480

产生的数字总是按照网络字节顺序。如上面的例子,数字按照 209×2563 + 207×2562 + 224×256 + 40 进行计算。

INET_ATON() 也能理解短格式 IP 地址:

mysql> SELECT INET_ATON('127.0.0.1'), INET_ATON('127.1');

        -> 2130706433, 2130706433

注释: 在存储由INET_ATON() 产生的值时,推荐你使用 INT UNSIGNED 列。假如你使用 (带符号) INT列, 则相应的第一个八位组大于127的IP 地址值会被截至  2147483647 (即, INET_ATON('127.255.255.255') 所返回的值)。请参见11.2节,“数值类型”。

    * INET_NTOA(expr)

给定一个数字网络地址 (4 或 8 比特),返回作为字符串的该地址的电地址表示。
   *   
mysql> SELECT INET_NTOA(3520061480);

        -> '209.207.224.40'

以上文章转载,现在的项目就是从数据库里取到一个IP数字,转化成实际的IP
在网上找了很久没有现成的,后来还是自己写了个方法,也很简单。


Author:QQ174554431


// TestBoostLibrary.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <string>
#include <vector>
#include <iostream>

#include <boost/cstdint.hpp> 
#include <boost/lexical_cast.hpp>
#include <sstream> 
void ConvertNumberIpAddress(boost::uint32_t &in_ipNumberAddress,std::string &out_validIpAddress)
{
	if(in_ipNumberAddress<0||in_ipNumberAddress>4294967295)
	{
		out_validIpAddress = "0.0.0.0"; //invalid IP Address
	}
	else
	{
		boost::uint32_t divisor = 256; 
		boost::uint32_t ip_section1 = 0;
		boost::uint32_t ip_section2 = 0;
		boost::uint32_t ip_section3 = 0;
		boost::uint32_t ip_section4 = 0;

		std::string ip_section_str1;
		std::string ip_section_str2;
		std::string ip_section_str3;
		std::string ip_section_str4;
		std::string dot = ".";

		ip_section1 = in_ipNumberAddress%divisor;
		in_ipNumberAddress = in_ipNumberAddress/divisor;
		ip_section2 = in_ipNumberAddress%divisor;
		in_ipNumberAddress = in_ipNumberAddress/divisor;
		ip_section3 = in_ipNumberAddress%divisor;
		in_ipNumberAddress = in_ipNumberAddress/divisor;
		ip_section4 = in_ipNumberAddress%divisor;
		ip_section_str1 = boost::lexical_cast <std::string> (ip_section1);
		ip_section_str2 = boost::lexical_cast <std::string> (ip_section2);
		ip_section_str3 = boost::lexical_cast <std::string> (ip_section3);
		ip_section_str4 = boost::lexical_cast <std::string> (ip_section4);
		out_validIpAddress = ip_section_str4+dot+ip_section_str3+dot+ip_section_str2+dot+ip_section_str1;
	}
}
int _tmain(int argc, _TCHAR* argv[])
{
	boost::uint32_t subnet = 3520061480;
	std::string ipAddress;
	ConvertNumberIpAddress(subnet,ipAddress);
	std::cout<<ipAddress<<std::endl;
	return 0;
}




运行结果:209.207.224.40
分享到:
评论

相关推荐

    c++ 域名转ip

    它接受一个域名字符串作为参数,返回一个`struct hostent`结构体,其中包含了与该域名关联的所有IP地址。由于IP地址可能有多个(如A记录轮询),我们需要遍历`struct hostent`的`h_addr_list`成员来获取所有IP地址。...

    Boost C++ 库

    Boost C++ 库中包含了许多用于字符串处理的功能,如`boost::algorithm`库,它提供了一系列高效的算法来操作字符串;`boost::spirit`库则提供了一个强大的词法分析框架,可用于解析复杂的文本格式。 #### 六、多线程...

    c++ TcpServer简单16进制

    - **解析16进制字符串**:如果接收到的是16进制字符串,我们需要将其转换回原始字节。这通常涉及解析每个两位的16进制数字,并用`std::stoul`或类似方法转换为整数,然后再组合成字节序列。 - **数据校验**:确保...

    C++ 获取本地的IP地址

    4. 转换二进制IP地址到字符串格式,使用`inet_ntop`函数。 在实际编程中,为了提高代码的可移植性,可以考虑使用跨平台的库,如Boost.Asio或Poco,它们提供了统一的接口来处理不同操作系统下的网络编程问题。在本例...

    c++语言获取本地ip

    4. **提取并转换IP地址**: - `pHost-&gt;h_addr_list[0]`用于获取第一个IP地址的原始形式。 - 使用`memcpy()`函数将原始IP地址复制到`in_addr`结构中。 - `inet_ntoa()`函数将`in_addr`结构中的IP地址转换为字符串...

    C++获取当前连接IP和主机名.rar

    - `inet_ntoa()`函数用于将网络字节序的IP地址转换为人类可读的字符串形式。 2. 获取主机名: - 使用`gethostname()`函数可以获取当前系统的主机名。这个函数不需要任何参数,但需要提供一个缓冲区来存储返回的...

    获得本机ip地址C++源代码

    在`gethostbyname`的结果中,IP地址通常以二进制形式存在,需要使用`inet_ntoa`将其转换为点分十进制的字符串形式。对于`getaddrinfo`,结果中已经包含了`struct sockaddr_in`或`struct sockaddr_in6`,可以直接...

    C++ boost::asio编程-域名解析详细介绍

    C++ boost::asio编程-域名解析 在网络通信中通常我们并不直接使用IP地址,而是使用域名。这时候我们就需要用reslover类来...#include &lt;boost&gt;//使用字符串转换功能 using namespace std; using namespace boost::asi

    highscore_boost,boost学习

    Boost C++库提供了丰富的字符串处理功能,如`boost::algorithm`库中的字符串算法。这些算法涵盖了查找、替换、分割等多种常见操作,极大地简化了字符串处理的难度。 #### 六、多线程 随着多核处理器的普及,多线程...

    C++爬虫

    - **DNS解析**:了解如何通过DNS将域名转换为IP地址,以便进行网络通信。 2. **网络库**: - **libcurl**:C++中最常用的网络库之一,支持HTTP、HTTPS等多种协议,可以方便地发送GET、POST等请求。 - **Poco库**...

    网络聊天chat c++

    例如,JSON是一种常见的数据交换格式,可以使用如nlohmann/json这样的库将C++对象转换为JSON字符串,再在网络上传输。 此外,聊天室程序还需要考虑用户身份验证、消息的存储与检索、消息广播等高级功能。用户认证...

    otus-print-ip

    在C++中,处理网络相关的任务,如IP地址的处理,通常涉及到系统调用或者使用库函数,如Boost.Asio或原生的socket API。下面我们将详细探讨与这个项目相关的C++知识点。 首先,C++并不是一种天生就支持网络编程的...

    boost_1_48_0

    4. **Boost.DateTime**:这个库提供了日期和时间的处理能力,包括日期计算、时间间隔以及与字符串的转换等功能。在1.48.0版本中,开发者可以方便地处理各种时间相关的任务。 5. **Boost.Regex**:Boost.Regex库提供...

    SMTP 简单邮件发送系统 C++语言实现

    3. **SMTP命令构造与解析**:在C++代码中,需要构造并发送符合SMTP规范的字符串命令,同时解析服务器返回的响应码和信息,以确保邮件传输的正确性。 4. **邮件格式**:SMTP传输的邮件内容遵循MIME(Multipurpose ...

    C++提交WEB请求(带中文参数)的动态链接库DLL源码

    这个DLL的实现可能涉及到的C++技术有网络编程、字符串处理、内存管理以及跨语言互操作。开发者在使用这个库时,需要根据自己的需求,将具体的WEB请求地址和参数传递给DLL,然后获取服务器的响应。理解这些知识点对于...

    Boost Asio Demo.zip

    在C++中,有多种库可以处理JSON,如nlohmann/json,它可以将JSON字符串转换为C++对象,反之亦然。 在服务器端,收到客户端的JSON数据后,需要解析并执行对应的函数。这可能涉及到解析JSON对象,获取函数名和参数,...

    消息处理引擎11月15日版(c++源码)

    此外,C++标准库中的string和stringstream等工具对于字符串操作和格式化非常有用。 解析后的消息需要进行路由,即决定它们应该被发送到哪里或由哪个组件处理。这可能涉及到设计和实现一种消息调度策略,例如基于...

    cpp代码-普通站群配置IP

    2. **IP地址处理**:在C++中,IP地址通常表示为字符串,如"192.168.1.1"。我们可以使用`inet_aton()`或`inet_pton()`函数将字符串形式的IP转换为二进制表示,以便在网络编程中使用。反之,`inet_ntoa()`或`inet_ntop...

    C++解析协议简单示例

    结构体的成员可以是基本类型,如`int`或`char`,用于存储协议中的数值和字符串。这样,我们读取文件后,可以直接将数据转换为结构体实例,便于操作和处理。 ```cpp struct HighwayRecord { int id; double ...

Global site tag (gtag.js) - Google Analytics