03 IP地址转换函数

1 inet_pton函数

#include <arpa/inet.h>
int inet_pton(int af, const char *src, void *dst);
  • 函数将点分十进制的IP地址转换为网络字节序的二进制值

  • ​af​ 参数指定了地址族,可以是 ​AF_INET​(IPv4)或 ​AF_INET6​(IPv6)

  • src​ 参数是一个指向以点分十进制表示的IP地址字符串的指针

  • dst​ 参数是一个指向用于存储转换结果的缓冲区(内存)的指针

  • 返回值:

     	成功: 1
    
     	异常: 0, 说明src指向的不是一个有效的ip地址。
    
     	失败:-1
    

2 inet_ntop函数

#include <arpa/inet.h>
const char *inet_ntop(int af, const void *src, char *dst, socklen_t size);
  • 函数将网络字节序的二进制值转换为点分十进制的IP地址
  • ​af​ 参数指定了地址族,可以是 ​AF_INET​(IPv4)或 ​AF_INET6​(IPv6)
  • src​ 参数是一个指向包含要转换的二进制值的内存块的指针,​
  • dst​ 参数是一个指向用于存储转换结果的缓冲区的指针
  • ​size​参数指定了缓冲区的大小。
  • 返回值:
    成功:dst。
    失败:NULL

3 例子

#include <stdio.h>
#include <arpa/inet.h>

int main() {
    // 将点分十进制的IP地址转换为网络字节序的二进制值
    char ip_str[] = "192.168.1.1";
    struct in_addr addr;
    if (inet_pton(AF_INET, ip_str, &addr) <= 0) {
        perror("inet_pton error");
        return -1;
    }
    printf("%s -> %x\n", ip_str, addr.s_addr);

    // 将网络字节序的二进制值转换为点分十进制的IP地址
    char ip_buf[INET_ADDRSTRLEN];
    const char *ret = inet_ntop(AF_INET, &addr, ip_buf, INET_ADDRSTRLEN);
    if (ret == NULL) {
        perror("inet_ntop error");
        return -1;
    }
    printf("%x -> %s\n", addr.s_addr, ip_buf);

    return 0;
}

结果

192.168.1.1 -> 101010c0
101010c0 -> 192.168.1.1
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值