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

inet_pton()函数的概念和使用案例

inet_pton() 是一个用于将点分十进制表示的 IP 地址(例如 “192.168.1.1”)或 IPv6 地址(例如 “2001:0db8:85a3:0000:0000:8a2e:0370:7334”)转换为网络字节序的二进制形式(即 in_addrin6_addr 结构体)的函数。这个函数的名字是 “pton”,代表 “presentation to network”,即“表示层到网络层”的转换。

定义

inet_pton() 函数原型定义在 <arpa/inet.h> 头文件中,如下所示:

int inet_pton(int af, const char *src, void *dst);

参数说明:

  • af: 地址族。对于 IPv4,它应该是 AF_INET;对于 IPv6,它应该是 AF_INET6
  • src: 指向点分十进制字符串或 IPv6 字符串的指针。
  • dst: 指向 in_addr(对于 IPv4)或 in6_addr(对于 IPv6)结构体的指针,该结构体将接收转换后的二进制地址。
    函数返回值:
  • 成功时返回 1。
  • 如果 src 不包含有效的网络地址,则返回 0。
  • 如果 af 不支持,则返回 -1 并设置 errno

使用案例

以下是一个使用 inet_pton() 函数的示例,该示例将 IPv4 地址从字符串转换为二进制形式:

#include <stdio.h>
#include <stdlib.h>
#include <arpa/inet.h>
int main() {
    struct sockaddr_in sa;
    int result;
    char ip4[] = "192.168.1.1";
    result = inet_pton(AF_INET, ip4, &(sa.sin_addr));
    if (result == 0) {
        fprintf(stderr, "Not in presentation formatn");
        exit(EXIT_FAILURE);
    } else if (result  0) {
        perror("inet_pton");
        exit(EXIT_FAILURE);
    }
    printf("IPv4 address in binary form: %sn", ip4);
    // 输出转换后的二进制地址(通常以十六进制形式表示)
    printf("sin_addr.s_addr (in network byte order): %xn", sa.sin_addr.s_addr);
    return 0;
}

在这个例子中,我们使用 inet_pton() 将一个 IPv4 地址从字符串形式转换为网络字节序的二进制形式,并将其存储在 sockaddr_in 结构体的 sin_addr 成员中。然后,我们检查 inet_pton() 的返回值以确保转换成功。如果转换成功,我们打印出原始的 IP 地址字符串和转换后的二进制地址(通常以十六进制形式表示)。

相关文章:

  • JavaScript作用域和闭包,原理与用途?
  • 面向对象程序设计-实验十一
  • CSS—盒模型(3分钟结合示例精通盒模型)
  • (十七)WebGL中 图像处理的初识
  • docker部署RustDesk自建服务器
  • 数据库(MySQL):使用命令从零开始在Navicat创建一个数据库及其数据表(一).创建基础表
  • Windows 系统常用快捷键指南
  • Linux 命令大全完整版(14)
  • Linux DMA Engine 基础
  • AI2-THOR环境下实现机器人导航、物体定位与抓取
  • C++经典框架案例(六)
  • CentOS停服后的替代选择:openEuler、Rocky Linux及其他系统的未来展望
  • 《离线唤醒+离线Vosk识别+DeepSeek+离线合成,你的第二大脑》
  • RFID涉密载体柜:智能安全,全程守护,提供智能化的安全管控
  • QEMU源码全解析 —— 内存虚拟化(18)
  • DeepSeek绘制UML设计图
  • HTTP实验(ENSP模拟器实现)
  • 【Python量化金融实战】-第1章:Python量化金融概述:1.2 Python在量化金融中的优势与生态
  • 愿在线段树中搁浅
  • ARM指令集
  • 什么网站可以做pie chart/网络营销推广方案3篇
  • 什么网站做家具外贸好呢/免费的个人网页
  • 网站建设公司兴田德润可信赖/做好网络推广
  • 深圳做棋牌网站建设哪家技术好/首页关键词排名优化
  • 青岛代理记账公司现状/上海优化关键词的公司
  • 做家装家居网站/1688黄页大全进口