【c语言网络编程】inet_pton函数

一,inet_pton函数,作用:将一个无符号整数字符串,转换成32位的网络字节序

二,头文件:#include <arpa/inet.h>

三,代码:

#include <stdio.h>     //inet_pton函数

#include <arpa/inet.h> //发送数据,主机发送给网络:将点分十进制数据转换成32位无符号数据

// IP地址是32字节  比如0102

// 串口号是16字节  比如01

int main(int argc, char *argv[])

{

    char *str_ip = "10.9.11.3";

    unsigned int data_ip = 0;

    inet_pton(AF_INET, str_ip, (void *)&data_ip);

    // 第二个参数是要转换的对象,第三个参数是转换的结果

    printf("data_ip=%u\n", data_ip); // 计算机存储的结果为 51054858

    // 分析32位IP在data_ip变量的存储方式

    unsigned char *p = (unsigned char *)&data_ip;

    printf("%d %d %d %d\n", *p, *(p + 1), *(p + 2), *(p + 3));

    // 自测32位IP在data_ip变量的存储为10 9 11 3

    return 0;

}

四,详细解读

这段代码主要展示了如何使用 C 语言中的指针操作和一些网络编程相关函数来处理 IP 地址的转换和存储:

1. `#include <stdio.h>`:包含标准输入输出库,以便使用 `printf` 函数输出结果。
2. `#include <arpa/inet.h>`:包含了一些网络编程相关的函数声明,比如 `inet_pton`,用于 IP 地址的转换。
3. `int main(int argc, char *argv[])`:程序的入口函数,接受命令行参数。
4. `char *str_ip = "10.9.11.3";`:定义一个指向字符串常量的指针 `str_ip`,存储了一个点分十进制的 IP 地址 "10.9.11.3"。
5. `unsigned int data_ip = 0;`:定义一个无符号整数 `data_ip`,初始化为 0,用于存储转换后的 IP 地址。
6. `inet_pton(AF_INET, str_ip, (void *)&data_ip);`:调用 `inet_pton` 函数,将点分十进制的 IP 地址转换为网络字节顺序的 32 位无符号整数,并将结果存储在 `data_ip` 中。
7. `printf("data_ip=%u\n", data_ip);`:打印转换后的 32 位无符号整数表示的 IP 地址,这里输出的是 `51054858`。
8. `unsigned char *p = (unsigned char *)&data_ip;`:定义一个无符号字符型指针 `p`,指向 `data_ip` 的起始地址,以便访问 `data_ip` 的每个字节。
9. `printf("%d %d %d %d\n", *p, *(p + 1), *(p + 2), *(p + 3));`:通过指针 `p` 访问 `data_ip` 的每个字节,并打印出来。这里输出的是 `10 9 11 3`,对应于 IP 地址 "10.9.11.3" 在内存中的存储方式。
10. `return 0;`:返回程序执行成功的状态码。

总结:使用 `inet_pton` 函数将点分十进制的 IP 地址转换为网络字节顺序的 32 位无符号整数,并通过指针操作访问这个整数在内存中的存储方式。这种操作在网络编程中常用于处理 IP 地址的转换和存储。

  • 18
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值