#include <stdio.h>
#include <stdint.h>
// 将点分十进制的IP地址转换为32位整数
uint32_t ip_string_to_int(const char *ip_str) {
uint32_t ip_int = 0;
int parts[4];
sscanf(ip_str, "%d.%d.%d.%d", &parts[0], &parts[1], &parts[2], &parts[3]);
// 假设输入是有效的,没有错误检查
ip_int = (parts[0] << 24) | (parts[1] << 16) | (parts[2] << 8) | parts[3];
return ip_int;
}
// 将32位整数转换为点分十进制的IP地址
void ip_int_to_string(uint32_t ip_int, char *ip_str) {
sprintf(ip_str, "%d.%d.%d.%d",
(ip_int >> 24) & 0xFF,
(ip_int >> 16) & 0xFF,
(ip_int >> 8) & 0xFF,
ip_int & 0xFF);
}
int main() {
const char *ip_str = "192.168.20.120";
uint32_t ip_int = ip_string_to_int(ip_str);
// 打印32位整数形式的IP地址(可选,通常不会这样做)
printf("IP in 32-bit integer form: %u\n", ip_int);
// 将32位整数转换回点分十进制的IP地址并打印
char ip_str_converted[16]; // 足够大以存储IP地址和终止符
ip_int_to_string(ip_int, ip_str_converted);
printf("IP in standard form: %s\n", ip_str_converted);
return 0;
}