在C语言中,你可以使用 inet_pton
函数将 IPv4 地址字符串转换为无符号整型(unsigned int
),或者通过手动解析字符串。以下是这两种方法的示例代码:
方法一:使用 inet_pton
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <arpa/inet.h>
unsigned int ipv4ToUnsignedInt(const char* ipv4) {
struct in_addr addr;
if (inet_pton(AF_INET, ipv4, &addr) != 1) {
fprintf(stderr, "Invalid IPv4 address\n");
exit(EXIT_FAILURE);
}
return ntohl(addr.s_addr); // 转换为主机字节序
}
int main() {
const char* ipv4 = "192.168.1.1";
unsigned int result = ipv4ToUnsignedInt(ipv4);
printf("Unsigned int: %u\n", result);
return 0;
}
方法二:手动解析
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
unsigned int ipv4ToUnsignedInt(const char* ipv4) {
unsigned int result = 0;
unsigned int octet;
for (int i = 0; i < 4; i++) {
char *endptr;
octet = strtoul(ipv4, &endptr, 10); // 将当前八位组转换为整数
if (endptr == ipv4 || *endptr != (i == 3 ? '\0' : '.')) { // 检查格式
fprintf(stderr, "Invalid IPv4 address\n");
exit(EXIT_FAILURE);
}
if (octet > 255) { // 检查是否在合法范围内
fprintf(stderr, "Invalid octet value: %u\n", octet);
exit(EXIT_FAILURE);
}
result = (result << 8) | octet; // 左移并合并当前八位组
ipv4 = endptr + 1; // 移动到下一个部分
}
return result;
}
int main() {
const char* ipv4 = "192.168.1.1";
unsigned int result = ipv4ToUnsignedInt(ipv4);
printf("Unsigned int: %u\n", result);
return 0;
}
注意事项:
- 使用
inet_pton
方法需要链接正确的网络库,并确保包含<arpa/inet.h>
和<netinet/in.h>
。 - 手动解析方法使用了
strtoul
,可以提供错误检查以确保每个部分都是有效的八位组。注意要处理好字符串的结束条件和点分隔符。
内容由零声教学AI助手提供,问题来源于学员提问