当前位置: 首页 > 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 地址字符串和转换后的二进制地址(通常以十六进制形式表示)。

http://www.dtcms.com/a/33833.html

相关文章:

  • 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指令集
  • Python 元组全解析:与其他数据类型的对比与应用题】
  • 医疗AI领域中GPU集群训练的关键技术与实践经验探究(下)
  • 更改conda 环境默认安装位置
  • 机器学习数学基础:31.Z检验
  • [python脚本]论文1.(一)CPU/内存数据分析和分组
  • 【AI】DeepSeek 概念/影响/使用/部署
  • Python 高级特性-迭代器
  • 【练习】【子集NO.1】力扣78. 子集
  • 【Research Proposal】基于提示词方法的智能体工具调用研究——难点
  • 解决 Nginx 代理后 HTTP 头部丢失的问题:以 access_token 为例