如何用C语言写一个点分十进制IP地址转换的程序
时间: 2024-10-14 07:14:31 浏览: 46
点分十进制IP转换为长整型
在C语言中编写一个点分十进制IP地址(如192.168.0.1)转换成二进制表示的程序,可以分为以下几个步骤:
1. 定义结构体存储IP地址的四个部分(每个部分是一个字节):
```c
struct IPAddress {
unsigned char octet[4];
};
```
2. 接收用户输入并验证IP地址的有效性:
```c
void parseIPv4(char *input) {
char *octets[] = {input + 0, input + 3, input + 7, input + 10};
struct IPAddress ip;
if (sscanf(octets[0], "%d", &ip.octet[0]) == 1 &&
sscanf(octets[1], "%d", &ip.octet[1]) == 1 &&
sscanf(octets[2], "%d", &ip.octet[2]) == 1 &&
sscanf(octets[3], "%d", &ip.octet[3]) == 1 &&
ip.octet[0] <= 255 && ip.octet[1] <= 255 &&
ip.octet[2] <= 255 && ip.octet[3] <= 255) {
// IP地址有效,继续转换
} else {
printf("Invalid IP address.\n");
return;
}
}
```
3. 将字节转换为二进制字符串:
```c
void toBinary(struct IPAddress ip) {
for (int i = 0; i < sizeof(ip.octet); i++) {
int binary = ip.octet[i];
while (binary > 0) {
printf("%d", binary % 2);
binary /= 2;
}
printf(".");
}
printf("\n");
}
```
4. 主函数将上述功能整合起来:
```c
int main() {
char ip_str[16];
printf("Enter an IPv4 address in dotted decimal format: ");
fgets(ip_str, sizeof(ip_str), stdin);
// 移除行尾的换行符
ip_str[strlen(ip_str)-1] = '\0';
parseIPv4(ip_str);
if (!strcmp(ip_str, "Invalid IP address.")) {
return 1;
}
struct IPAddress ip;
toBinary(ip);
return 0;
}
```
这个程序首先提示用户输入IP地址,然后检查它是否有效。如果有效,则将其拆分成四个字节,并分别转换为二进制形式。
阅读全文