inet_addr() 举例
时间: 2024-12-15 15:22:54 浏览: 5
`inet_addr()` 是 C 标准库中的一个函数,它用于将 Internet 协议(IP)地址从点分十进制形式转换为 32 位无符号整数(对于IPv4)或 128 位无符号整数(对于IPv6)。这个函数主要用于静态配置和解析IPv4地址,但对于动态获取、验证或处理复杂的网络地址格式来说,它并不总是最佳选择,因为它仅适用于已知和固定的 IP 地址。
函数原型如下:
```c
in_addr_t inet_addr(const char *cp);
```
这里参数说明如下:
- `cp`: 需要解析的点分十进制IP地址字符串,如 "192.168.1.1"。
使用 `inet_addr()` 的简单例子:
```c
#include <arpa/inet.h>
#include <stdio.h>
int main() {
char ip_str[] = "192.168.1.1";
in_addr_t ip_num;
// 解析IP地址到32位整数
ip_num = inet_addr(ip_str);
// 如果解析成功,可以使用 ntohl() 函数将其从网络字节序转回主机字节序
if (ip_num != INADDR_NONE) {
printf("IPv4 Address: %d\n", ntohl(ip_num));
} else {
printf("Invalid or unassigned IPv4 address.\n");
}
return 0;
}
```
在这个例子中,如果输入的IP地址有效,则 `inet_addr()` 返回对应的数值,然后 `ntohl()` 函数用于将该数值从网络字节序转换为适合本地主机使用的格式。
注意,`inet_addr()` 只能解析IPv4地址,对于IPv6,需要使用其他方法,因为IPv6地址长度超过了 `in_addr_t` 类型所能表示的范围。
阅读全文