IP地址转换函数

IP地址转换函数

ipv4地址之间的转换
#include <arpa/inet.h>
in_addr_t inet_addr(const char* strptr);
int inet_aton(const char* cp, struct in_addr* inp);
char* inet_ntoa(struct in_addr_in);

ip地址的表示:

字符串:点分十进制(记录日志需要转换为字符串)。

整数:存储ip地址的32bit(编程的时候需要转换为整数)。

#include <iostream>
#include <bitset>
#include <arpa/inet.h>
using namespace std;

int main()
{
  string ip;
  while (cout << "输入:",cin >> ip){
    /* 字符串转整数 */
    in_addr_t tmp = inet_addr(ip.c_str()); //返回整数ip
    cout << "in_addr_t(整数):" << tmp << endl;

    struct in_addr inp; //结构体中只有一个无符号整形数s_addr
    inet_aton(ip.c_str(), &inp);
    cout << "in_addr(结构体/整数):" << inp.s_addr <<endl;

    bitset<sizeof(tmp) * 8> b(tmp); //输出二进制ip
    cout << "ipv4二进制表示:" << b << endl;

    /* 整数ip转字符串 */
    char* p = inet_ntoa(inp);
    cout << "inet_ntoa(字符串):" << p << endl;
  }
  return 0;
}
输入:192.168.124.14
in_addr_t(整数):243050688
in_addr(结构体/整数):243050688
ipv4二进制表示:00001110011111001010100011000000
inet_ntoa(字符串):192.168.124.14
输入:192.168.22.159
in_addr_t(整数):2669062336
in_addr(结构体/整数):2669062336
ipv4二进制表示:10011111000101101010100011000000
inet_ntoa(字符串):192.168.22.159
上一篇:freeswitch的docker构建过程


下一篇:INET_ATON(expr)