写点什么

用 C 语言实现,终端输入 1.2.3.4/32,解析输出 unsignedint 类型的 1.2.3.4 和 32

作者:linux大本营
  • 2023-04-25
    湖南
  • 本文字数:789 字

    阅读完需:约 3 分钟

以下是一个用 C 语言实现的终端输入 IP 地址和子网掩码,并输出对应的 unsigned int 类型 IP 地址和子网掩码位数的程序:


#include <stdio.h>#include <stdlib.h>#include <string.h>#include <arpa/inet.h>
int main(int argc, char *argv[]) { if (argc != 2) { printf("Usage: %s ip_address/subnet_mask\n", argv[0]); return 1; }
char *ip_and_mask = argv[1]; char *ip_str = strtok(ip_and_mask, "/"); char *mask_str = strtok(NULL, "/");
struct in_addr ip; if (inet_pton(AF_INET, ip_str, &ip) != 1) { printf("Invalid IP address: %s\n", ip_str); return 1; }
unsigned int mask; if (mask_str == NULL) { mask = 32; } else { mask = atoi(mask_str); } if (mask > 32 || mask < 0) { printf("Invalid subnet mask: %d\n", mask); return 1; }
unsigned int ip_int = ntohl(ip.s_addr); printf("%u.%u.%u.%u\n", (ip_int >> 24) & 0xFF, (ip_int >> 16) & 0xFF, (ip_int >> 8) & 0xFF, ip_int & 0xFF); printf("%d\n", mask);
return 0;}
复制代码


程序中,首先判断命令行参数的个数,如果不等于 2,则提示用法并退出。然后从命令行参数中解析出 IP 地址和子网掩码部分, 将 IP 地址转换成结构体 in_addr,使用 inet_pton 函数实现。接下来, 判断子网掩码部分是否存在,如果不存在,则默认子网掩码位数为 32;否则, 将字符串转换成整数。最后,计算对应的无符号整型 IP 地址和子网掩码位数,并使用 printf 函数输出。


例如,如果输入 ./program 192.168.0.1/24,则输出:


192.168.0.124
复制代码


注意,程序中使用了一些库函数,需要在文件开头添加相应的头文件:<stdio.h><stdlib.h><string.h><arpa/inet.h>


相关技术视频教程:c/c++ linux服务器开发/后台架构师免费学习地址

用户头像

还未添加个人签名 2020-11-26 加入

C/C++linux服务器开发群 812855908

评论

发布
暂无评论
用C语言实现,终端输入1.2.3.4/32,解析输出unsignedint类型的1.2.3.4和32_C语言_linux大本营_InfoQ写作社区