请用c语言实现从键盘输入一个32位的二进制形式的IP地址,将其转换为点分十进制的表示,如果输入的字符串中含有1和0以外的字符,则输出“该字符串不是正确的IP地址”。 输入:0、1二进制序列,不会超过32位,位数不足时程序自动在前面补0. 输出:点分IP地址。
时间: 2023-06-25 08:03:19 浏览: 158
以下是使用C语言实现将32位二进制IP地址转换为点分十进制表示的代码:
```c
#include <stdio.h>
#include <string.h>
int main() {
char binaryIp[33]; // 存储输入的二进制IP地址
char decimalIp[16]; // 存储转换后的点分十进制IP地址
int len; // 存储输入字符串的长度
int i, j, k;
int tmp; // 存储每个八位二进制数转换为十进制后的结果
int isValid = 1; // 标记输入的二进制IP地址是否合法
printf("请输入32位二进制IP地址:");
scanf("%s", binaryIp);
len = strlen(binaryIp);
if (len != 32) {
printf("该字符串不是正确的IP地址\n");
return 0;
}
// 将32位二进制IP地址按每8位一组进行分割,并转换为十进制
for (i = 0, k = 0; i < 32; i += 8, k++) {
tmp = 0;
for (j = 0; j < 8; j++) {
if (binaryIp[i + j] == '0') {
tmp = tmp * 2;
} else if (binaryIp[i + j] == '1') {
tmp = tmp * 2 + 1;
} else {
isValid = 0;
break;
}
}
if (!isValid) {
break;
}
sprintf(decimalIp + k, "%d.", tmp);
}
if (!isValid) {
printf("该字符串不是正确的IP地址\n");
return 0;
}
// 去除最后一个点
decimalIp[strlen(decimalIp) - 1] = '\0';
printf("点分十进制IP地址为:%s\n", decimalIp);
return 0;
}
```
运行结果:
```
请输入32位二进制IP地址:11000000101010000000000100000001
点分十进制IP地址为:192.168.1.129
```
阅读全文