判断IP是否在IP段内

项目当中衍生出来的一道题,给定一个IP段以及一个IP,判断这个IP是否在此IP段内。IP段的表示方法有两种,一种如192.168.1.0/24,另一种如192.168.1.1-254
例:

1.
input:  192.168.1.0/24
        192.168.1.56
output: true
//192.168.1.0/24表示的IP范围是192.168.1.1~192.168.1.254192.168.1.5.6在此范围内,返回true
2.
input:  192.168.1.0-254
        192.168.1.56
output: true
//192.168.1.0-254表示的IP范围是192.168.1.1~192.168.1.254192.168.1.5.6在此范围内,返回true       

C实现方法

#include<stdio.h>
#include<string.h>
#include<stdbool.h>
#include<stdlib.h>
typedef unsigned int uint32_t;
typedef unsigned char u_char;
uint32_t ngx_convert_ip_to_uint(char* base) ;
bool ngx_is_black_ip_style_two(char* base, char* src);
bool ngx_is_black_ip_style_one(char* base, char* src);
int main()
{
    char        s[30], r[30], *pos;
    bool        ans;

    scanf("%s\n%s", (char*)&s, (char*)&r);
    pos = strchr(s, '/');
    if (pos) {
         ans = ngx_is_black_ip_style_one(s, r);
    } else {
         ans = ngx_is_black_ip_style_two(s, r);
    }
    printf("ans = %d\n", ans);
    return 0;
}

//192.168.1.1-254
bool ngx_is_black_ip_style_two(char* base, char* src)
{
    int          num = 0;
    char        *pos;
    uint32_t     res[3] = {0,0,0};

    pos = strchr(base, '-');
    *pos = '\0';
    //IP 下限
    res[0] = ngx_convert_ip_to_uint(base);
    num = atoi(pos+1);
    printf("num = %d\n", num);  
    //IP上限 
    res[1] = res[0] + num;
    //待匹配IP
    res[2] = ngx_convert_ip_to_uint(src);
    printf("res = %u\t%u\t%u\n", res[0], res[1], res[2]);
    if (res[2] > res[0] && res[2] < res[1])
        return true;
    return false;

}

//Ip 192.168.0.1/24
bool ngx_is_black_ip_style_one(char* base, char* src)
{
    int          num = 0;
    char        *pos;
    uint32_t     res[3] = {0,0,0};

    pos = strchr(base, '/');
    *pos = '\0';
    //IP 下限
    res[0] = ngx_convert_ip_to_uint(base);
    num = atoi(pos+1);
    printf("num = %d\n", num);  
    //IP上限 
    res[1] = res[0] + (1 << (32 - num));
    //待匹配IP
    res[2] = ngx_convert_ip_to_uint(src);
    printf("res = %u\t%u\t%u\n", res[0], res[1], res[2]);
    if (res[2] > res[0] && res[2] < res[1])
        return true;
    return false;

}

//IP 转换成数字
uint32_t ngx_convert_ip_to_uint(char* base) 
{
    char       *pos, *index;
    uint32_t    res = 0;    

    index = pos = base;
    while (*pos) {
        if (*pos == '.') {
            *pos = '\0';
            res = (res << 8) + atoi(index);
            printf("res = %u\n",res);
            index = pos+1;
        }
        pos++;
    }
    res = (res << 8) + atoi(index); 
    return res;
}
全部评论

相关推荐

2025-12-08 07:42
门头沟学院 Java
27届末九,由于是女生,身边人几乎没有就业导向的,自学只能跟着网课,没人指导,很迷茫。下图是我目前的简历,不知道有需要修改的地方吗?求拷打。下面是目前的学习情况:目前算法过完了一遍力扣100和代码随想录,不过不是很熟,面经看了小林coding、JavaGuide,有一些没用过的技术看得不是很明白,掌握得不是很扎实。再加上常年跟黑马网课听思路,真正自己动手写代码的时间很少,这让我一直不敢投简历,总觉得内里空虚。项目没准备好面试相关的问题,简历上相应的考点不熟。如此种种。。。看到很多很多学长学姐大佬们的面经,愈发觉得面试可怕,自己没准备好,总担心自己是不是无望后端开发了。看到牛客很多同届以及更小一届的同学都找到实习了,很希望自己也能找到实习。而自己又好像摸不到后端学习的门路,只能不断赞叹黑马虎哥写的代码真优雅!微服务架构实在巧妙!消息队列、redis、sentinel、nacos、mybatisplus等等的引入都会让我赞叹这些工具的设计者的巧思,以及包括但不限于Java语言的优雅。然而只是停留在了解的程度,并不熟练。我是很希望能够继续深入探索这些知识的,只不过有一大部分时间都花在学校课程上了。我感觉我被困住了,我一方面必须保证我能够有个不错的学业分使我能有我几乎不想选择的读研退路(还有个原因是复习不全我会焦虑考试挂科,因此我会做好全面的准备,而这一步很费时间),一方面在B站学习各种网课,一方面得考虑提升自己并不扎实的算法基础,另一方面还得准备八股面经。这让我有点苦恼,我好像没那么多时间,因为绝大部分时间都花在了复习学校科目中了。我好像处处用时间,但收效甚微。想问问各位大佬是怎么平衡时间的呢?算法、项目和八股是怎么准备的呢?有什么高效的方法吗?谢谢您们花时间阅读我的稿件!
菜菜狗🐶:大胆投,我当时也是害怕面试,投多了发现根本约不到面🤡
点赞 评论 收藏
分享
老粉都知道小猪猪我很久没更新了,因为秋招非常非常不顺利,emo了三个月了,接下来说一下我的情况吧本人是双非本&nbsp;专业是完全不着计算机边的非科班,比较有优势的是有两段大厂实习,美团和字节。秋招面了50+场泡池子泡死的:滴滴&nbsp;快手&nbsp;去哪儿&nbsp;小鹏汽车&nbsp;不知名的一两个小厂其中字节13场&nbsp;两次3面挂&nbsp;两次2面挂&nbsp;一次一面挂其中有2场面试题没写出来,其他的都是全a,但该挂还是挂,第三次三面才面进去字节,秋招加暑期总共面了22次字节,在字节的面评可以出成书了快手面了8场,2次实习的,通过了但没去,一次2面挂&nbsp;最后一次到录用评估&nbsp;至今无消息滴滴三面完&nbsp;没几天挂了&nbsp;所有技术面找不出2个问题是我回答不上来的,三面还来说我去过字节,应该不会考虑滴滴吧,直接给我干傻了去哪儿一天速通&nbsp;至今无消息小鹏汽车hr&nbsp;至今无消息美团2面挂&nbsp;然后不捞我了,三个志愿全部结束,估计被卡学历了虾皮二面挂&nbsp;这个是我菜,面试官太牛逼了拼多多二面挂&nbsp;3道题也全写了&nbsp;也没问题是回答不出来的&nbsp;泡一周后挂腾讯面了5次&nbsp;一次2面挂&nbsp;三次一面挂,我宣布腾讯是世界上最难进的互联网公司然后还有一些零零散散的中小厂,但是数量比较少,约面大多数都是大厂。整体的战况非常惨烈,面试机会少,就算面过了也需要和各路神仙横向对比,很多次我都是那个被比下去的人,不过这也正常,毕竟谁会放着一个985的硕士不招,反而去招一个双非读化学的小子感觉现在互联网对学历的要求越来越高了,不仅仅要985还要硕士了,双非几乎没啥生存空间了,我感觉未来几年双非想要进大厂开发的难度应该直线上升了,唯一的打法还是从大二刷实习,然后苟个转正,不然要是去秋招大概率是炮灰。而且就我面字节这么多次,已经开始问很多ai的东西了,你一破本科生要是没实习没科研懂什么ai啊,纯纯白给了
不知名牛友_:爸爸
秋招你被哪家公司挂了?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务