一,inet_pton函数,作用:将一个无符号整数字符串,转换成32位的网络字节序
二,头文件:#include
三,代码:
#include
#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
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 地址的转换和存储。
还没有评论,来说两句吧...