想找个现成的直接用都找不到,只好自己写了
直接上码

1.c

// 编译 gcc 1.c
#include <stdio.h>
#include <string.h>
#include <stdlib.h>// 通过IP地址和子网掩码计算网络号,传入正确的ip,正确的netmask,网络号,网络号长度。 成功返回1,失败返回0
int ip_netmask_to_NSID(char* ip, char* netmask, char* NSID, int size)
{int ip_len = 0;int netmask_len = 0;int temp_len = 0;int temp_len2 = 0;int ip_arr[4] = {0};int netmask_arr[4] = {0};int NSID_arr[4] = {0};int i = 0;char temp_str[4] = {0};char NSID_str[16] = {0};char* p_ip = ip;char* p_netmask = netmask;// 临时指针char* temp = NULL;// 4次循环依次获取每位ipfor(i = 0; i < 4; i++){// printf("i=%d\n", i);ip_len = strlen(p_ip);// 获取'.'首次出现的位置if(i != 3){temp = strchr(p_ip, '.');if(NULL == temp){return 0;}}else{temp = p_ip;}temp_len = strlen(temp);// printf("temp_len=%d\n", temp_len);// 计算第一位ip的长度if(i != 3){temp_len2 = ip_len - temp_len;}else{temp_len2 = temp_len;}// printf("temp_len2=%d\n", temp_len2);// 字符串截取memset(temp_str, 0, sizeof(temp_str));strncpy(temp_str, p_ip, temp_len2);// 存入数组ip_arr[i] = atoi(temp_str);// printf("ip_arr[%d]=%d\n", i, ip_arr[i]);// 前3个进行指针偏移if(i != 3){p_ip += (temp_len2 + 1);}}temp = NULL;temp_len = 0;temp_len2 = 0;// 4次循环依次获取每位netmaskfor(i = 0; i < 4; i++){// printf("i=%d\n", i);netmask_len = strlen(p_netmask);// 获取'.'首次出现的位置if(i != 3){temp = strchr(p_netmask, '.');if(NULL == temp){return 0;}}else{temp = p_netmask;} temp_len = strlen(temp);// printf("temp_len=%d\n", temp_len);// 计算netmask的长度if(i != 3){temp_len2 = netmask_len - temp_len;}else{temp_len2 = temp_len;}// printf("temp_len2=%d\n", temp_len2);// 字符串截取memset(temp_str, 0, sizeof(temp_str));strncpy(temp_str, p_netmask, temp_len2);// 存入数组netmask_arr[i] = atoi(temp_str);// printf("netmask_arr[%d]=%d\n", i, netmask_arr[i]);// 前3个进行指针偏移if(i != 3){p_netmask += (temp_len2 + 1);}}temp = NULL;// 计算各位网络号for(i = 0; i < 4; i++){NSID_arr[i] = ip_arr[i] & netmask_arr[i];}// 拼接为完整的网络号snprintf(NSID_str, 15, "%d.%d.%d.%d", NSID_arr[0], NSID_arr[1], NSID_arr[2], NSID_arr[3]);strncpy(NSID, NSID_str, size);return 1;
}int main()
{char ip1[16] = "192.168.10.1";char netmask1[16] = "255.255.255.0";char ip2[16] = "192.168.10.100";char netmask2[16] = "255.255.255.224";char ip3[16] = "192.168.10.200";char netmask3[16] = "255.255.255.255";char NSID[16] = {0};if(0 == ip_netmask_to_NSID(ip1, netmask1, NSID, 15)){printf("0\n");}else{printf("NSID:%s\n", NSID);}if(0 == ip_netmask_to_NSID(ip2, netmask2, NSID, 15)){printf("0\n");}else{printf("NSID:%s\n", NSID);}if(0 == ip_netmask_to_NSID(ip3, netmask3, NSID, 15)){printf("0\n");}else{printf("NSID:%s\n", NSID);}return 0;
}

效果如下

C语言实现通过IP和子网掩码计算网络号相关推荐

  1. TCP/IP学习——利用主机IP与子网掩码计算网络号

    阿里巴巴的一道题目,是关于利用主机IP与子网掩码计算网络号. 在此之前,我们需要先了解下五类IP地址. 在同一个物理网络上的主机的地址都有一个相同前缀,即IP地址分成两个部分:netid,hostid ...

  2. 计算机网络:根据IP和子网掩码计算网络号

    题目感觉有误,但是解题思路是正确的. 已知B类地址的子网掩码为255.255.0.0,假设某B类地址为127.24.36.55,那么它的网络号为:() A.127.24.0.0 B.0.0.36.55 ...

  3. 计算机网络之ip、子网掩码、网络号、主机号等概念解析

    在工作中谈论到计算机网络时,有几个经常出现的术语,比如:ip.子网掩码.网段等等.之前对这些概念的理解都比较模糊,只知其大概意思,随着工作中遇到的网络问题越来越多,有必要详细理解一下计算机网络的基础知 ...

  4. 已知IP地址和子网掩码计算网络号

    已知B类地址的子网掩码为255.255.0.0,假设某B类地址为127.24.36.55,那么它的网络号为:() A.127.24.0.0 B.0.0.36.55 C.255.255.36.55 D. ...

  5. IP、子网掩码、网络号和主机号的关系

    IPV4的IP地址格式通常表示为xxx.xxx.xxx.xxx,其中xxx为十进制数,取值范围是[0,255],若用16进制表示则为xx.xx.xx.xx,其中xx的取值范围是[0,FF].IP地址使 ...

  6. 主机ip和子网掩码计算

    文章目录 主机ip和子网掩码计算 求子网地址 求广播地址 求该子网IP地址总数 该子网的可分配IP地址总数 地址范围 主机ip和子网掩码计算 假设某子网中的一个主机的IP地址是203.123.1.13 ...

  7. IP地址、子网掩码、网络号、主机号、子网号的计算

    IP地址.子网掩码.网络号.主机号.子网号的计算 IP地址(二级IP地址) 构成:网络号+主机号 分类 IP地址分类 网络号 主机号 A类 8位 24位 B类 16位 16位 C类 24位 8位 有效 ...

  8. 计算机网络知识总结:有关IP地址、子网掩码、网络号、主机号、网络地址、主机地址以及ip段/数字的概念及笔试题

    有关知识背景及概念 参考书籍:<图解TCP/IP> 1.IP地址(Internet Protocol Address) IP地址(Internet Protocol Address)是指互 ...

  9. [转帖]IP地址、子网掩码、网络号、主机号、网络地址、主机地址以及ip段/数字-如192.168.0.1/24是什么意思?...

    IP地址.子网掩码.网络号.主机号.网络地址.主机地址以及ip段/数字-如192.168.0.1/24是什么意思? 2016年03月26日 23:38:50 JeanCheng 阅读数:105674  ...

最新文章

  1. 红黑树的原理_红黑树插入算法实现原理分析
  2. 谁都忍不了烂代码,如何用重构的方式让它整洁起来?
  3. ORACLE 执行计划2
  4. C# override详解
  5. linux创建指定大小的文件
  6. 动态规划——矩阵中的最短路径长度
  7. beanfactory的实现类_ApplicationContext和BeanFactory的区别
  8. 二、服务器优化(3)服务器端优化措施
  9. ACL2020 | 词向量性别偏见
  10. 2M口,电口,光口的区别
  11. Maya---2018up4 Python 开发环境配置(win10x64)
  12. git使用kdiff3合并乱码问题
  13. FLAC无损音频播放
  14. 语言教案 小小计算机,大班语言小小播音员游戏教案
  15. .vip域名是什么?
  16. 如何用c++发出音乐
  17. 什么是lo本地回环?
  18. 微信小程序零基础入门(上)
  19. 遇到jQuery 中的 slideUp ,slideToggle和 slideDown 动画重复执行
  20. HTML5七夕情人节表白网页(抖音3D立方体图像库) HTML+CSS+JavaScript 求婚示爱代码 520情人节告白代码 程序员表白源码 3D旋转相册 js烟花代码 css爱心表白

热门文章

  1. js实现:点击为盒子添加样式。边框和整体样式。
  2. 在Python中使用逆变换方法生成随机变量
  3. Redis学习笔记【04】 - 字符串
  4. VR全景的应用及拍摄
  5. 三星关闭shell提示_shell关闭指定进程
  6. 每日一练 Ding持续更新中 ~
  7. 道法自然《三》:框架设计要提供机制
  8. Service中bindService
  9. 【愚公系列】2023年02月 .NET/C#知识点-程序运行计时的总结
  10. Social GAN: Socially Acceptable Trajectories with Generative Adversarial Networks 中文翻译