例如:点分十进制IP地址(10.21.11.101),实际上是32bit二进制数(00001010.00010101.00001011.01100101),去掉点号后00001010000101010000101101100101,其对应的十进制数形式为169151333,十六进制数形式为a150b65。用C语言实现: 输入一个形如a.b.c.d的字符串(无空格,长度不超过100)。 输出 若该字符串是一个合法的IP地址,则分两行输出该IP地址对应的十进制数和十六进制数,否则输出error。
时间: 2024-02-11 21:08:01 浏览: 164
node-v10.21.0-linux-x64.tar.gz
好的,以下是对应的 C 语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
char str[100];
scanf("%s", str);
int a, b, c, d;
if (sscanf(str, "%d.%d.%d.%d", &a, &b, &c, &d) == 4 &&
a >= 0 && a <= 255 &&
b >= 0 && b <= 255 &&
c >= 0 && c <= 255 &&
d >= 0 && d <= 255) {
int decimal = (a << 24) | (b << 16) | (c << 8) | d;
printf("%d\n", decimal);
printf("%08X\n", decimal);
} else {
printf("error\n");
}
return 0;
}
```
这个代码中,我们首先使用 `scanf()` 读取输入的字符串,然后使用 `sscanf()` 解析出四个数字。如果解析成功,并且每个数字都在 0 到 255 的范围内,那么我们就可以将这四个数字组合成一个 32 位的二进制数,然后分别输出它的十进制形式和十六进制形式。如果解析失败或者数字超出范围,那么就输出 `error`。
阅读全文