子网掩码转换:长度<-->点分10进制_子网前缀长度8怎么填点分十进制开始-程序员宅基地

子网掩码常见的表示方法有两种:
一种用长度表示, 比如24, 表示掩码中含有二进制1的个数
一种用点分10进制表示,比如255.255.255.0
 
以下是我写的一个二者之间相互转换的函数,请参考:
 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <arpa/inet.h>

/*
 * len --> *.*.*.*
 * 25 --> 255.255.255.128
 */

char* netmask_len2str(int mask_len, char* mask_str)
{
    int i;
    int i_mask;
    
    for (= 1, i_mask = 1; i < mask_len; i++)
    {
        i_mask = (i_mask << 1) | 1;
    }

    i_mask = htonl(i_mask << (32 - mask_len));
    strcpy(mask_str, inet_ntoa(*((struct in_addr *)&i_mask)));
    
    return mask_str;
}

/*
 * *.*.*.* --> len
 * 255.255.255.128 --> 25
 */

int netmask_str2len(char* mask)
{
    int netmask = 0;
    unsigned int mask_tmp;

    mask_tmp = ntohl((int)inet_addr(mask));
    while (mask_tmp & 0x80000000)
    {
        netmask++;
        mask_tmp = (mask_tmp << 1);
    }

    return netmask;    
}

int main(int argc, char** argv)
{
    int len = 0;
    char tmp[20] = { 0};

    len = strlen(argv[1]);
    
    if (len > 2) 
        printf("%s --> %d\n", argv[1], netmask_str2len(argv[1]));
    else /* 1 ~ 32 */
        printf("%s --> %s\n", argv[1], netmask_len2str(atoi(argv[1]), tmp));
    
    return 0;
}

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/jy15569597/article/details/7622531

智能推荐

c++ - STL - 基础-程序员宅基地

文章浏览阅读349次。c++ stl

python之——使用python编写爆破脚本-程序员宅基地

文章浏览阅读2.9k次,点赞7次,收藏21次。此处以dvwa网站的密码爆破为例#coding:utf-8"""dvwa高级爆破 需要用户名 密码 token cookie每次通过账号密码访问之前,需要获取token"""import urllib2from bs4 import BeautifulSoupdef getToken(): """提取token""" url="http://localhos...

什么是编码和解码-程序员宅基地

文章浏览阅读9.8k次。举例说明_编码和解码

一文解决python的GUI--python程序员必会GUI库-神器PySimpleGUI良心总结_pysimplegui教程-程序员宅基地

文章浏览阅读1.3k次,点赞6次,收藏9次。import PySimpleGUI as sg def 总体说明(): #下面这个layout变量就是控件的集合,里面放空间 #将来我们直接把这个变量传到窗口(屏幕)那里 #你可以把它当作实际内容 #以下是个简单的例子 layout = [[sg.Text("要显示在窗口上的文字")], [sg.Button("完成")]] #他还有参数,你懂的:title='Options',etitle_color='rd', #sg.Win..._pysimplegui教程

基于docker swarm 的nacos集群_docker swarm nacos-程序员宅基地

文章浏览阅读2.6k次。10.1 集群搭建nacos集群 的部署依赖docker swarm 集群,部署之前请先将nacos实例所在的docker 节点加入swarm集群,配置方式如下:选择其中一台服务器做docker swrm的masterdocker swarm init验证:剩余主机加入swarm集群将上一步的输出信息红框部分命令到剩余主机上执行,加入swarm集群验证:在master中查看node信息:验证:nacos集群至少需要3台主机,由于nacos属于"有状态服务"因此需要保证一致性(通过配_docker swarm nacos

深入了解Flutter的isolate(2) --- 创建自己的isolate -程序员宅基地

文章浏览阅读1.8k次。0x00 前言Flutter的代码都是默认跑在root isolate上的,那么Flutter中能不能自己创建一个isolate呢?当然可以!,接下来我们就自己创建一个isolate!0x01 dart:isolate有关isolate的代码,都在isolate.dart文件中,里面有一个生成isolate的方法: external static Future&lt;Isolate&gt..._flutter的isolate创建过程

随便推点

stm32入门学习(基于STM32F103C8T6)_stm32f103c8t6csdn-程序员宅基地

文章浏览阅读456次,点赞8次,收藏2次。じゃ、始めましょう。--最近在学外语,对于IT从业者来说,会是一项优势。_stm32f103c8t6csdn

Anaconda安装_anaconda环境变量e:\anaconda3\library\usr\bin-程序员宅基地

文章浏览阅读7.1k次,点赞41次,收藏196次。文章目录1.Anaconda是什么2.Anaconda下载3.Anaconda安装4.Anaconda环境变量配置5.检验是否安装成功6.检验Anaconda Navifator是否安装成功7.修改Anaconda镜像修改为清华大学镜像移除清华大学镜像8.PyCharm配置Anaconda方式一(建立新的项目时)方式二(已经打开项目)9.总结1.Anaconda是什么Anaconda指的是一个开源的Python发行版本,其包含了conda、Python等180多个科学包及其依赖项。Anaconda也是P_anaconda环境变量e:\anaconda3\library\usr\bin

70个常用电脑快捷键,帮你工作效率提升100倍!职场新人必备!_快捷键可以帮助自己-程序员宅基地

文章浏览阅读2k次,点赞11次,收藏44次。电脑快捷键不仅可以帮助我们熟练的操作电脑,还可以帮助我们快速提升自己的工作效率,从此跟加班说拜拜!但由于电脑快捷键过于繁多不方便我们记忆!那么今天小编为大家整理的70个Wordows、Ctrl、Alt、Shift组合快捷键,运用好的话能够帮你工作效率提升100倍!希望能为大家派上用途!下面以图片&amp;文字的形式展现给大家!文字可以直接复制!图片也可以直接拿去收藏!..._快捷键可以帮助自己

用HTML语言制作一个非常浪漫的生日祝福网,手把手教你制作炫酷生日祝福网页_用html做一个生日快乐网页-程序员宅基地

文章浏览阅读2.2w次,点赞317次,收藏636次。明天就是女朋友的生日了, 是时候展现专属于程序员的浪漫了!你打算怎么给心爱的人表达爱意?鲜花礼物?代码表白?还是创意DIY?或者…无论那种形式,快来秀我们一脸吧!_用html做一个生日快乐网页

idea快捷键配置和常用快捷键_idea自定义快捷键-程序员宅基地

文章浏览阅读1.1k次。idea快捷键配置和常用快捷键_idea自定义快捷键

y2.2隐藏英雄密码_从嗨到2y 10 tmnkr您的密码发生了什么-程序员宅基地

文章浏览阅读99次。y2.2隐藏英雄密码Say that I decide to sign up for an account an incredibly insecure password, ‘hi’. How does this become something stored in the database like this: 假设我决定为一个帐户注册一个非常不安全的密码“ hi ”。 它如何变成这样存储在数据..._$2y$10$y

推荐文章

热门文章

相关标签