【c语言网络编程】inet

【c语言网络编程】inet

码农世界 2024-05-23 前端 62 次浏览 0个评论

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

二,头文件:#include

三,代码:

#include     //inet_pton函数

#include //发送数据,主机发送给网络:将点分十进制数据转换成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 `:包含标准输入输出库,以便使用 `printf` 函数输出结果。

2. `#include `:包含了一些网络编程相关的函数声明,比如 `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 地址的转换和存储。

转载请注明来自码农世界,本文标题:《【c语言网络编程】inet》

百度分享代码,如果开启HTTPS请参考李洋个人博客
每一天,每一秒,你所做的决定都会改变你的人生!

发表评论

快捷回复:

评论列表 (暂无评论,62人围观)参与讨论

还没有评论,来说两句吧...

Top