1. 根据掩码获取掩码的位数

int mask2len(unsigned int mask)
{
/*eg: 255.255.255.0 255.0.255.255.0*/
int bit=0,len=0; while( ~mask & (1ULL<<bit))
bit++;
len = 32 - bit; if(~mask >> bit){
printf("mask is not standerd, get mask length error\n");
return -1;
}
printf("mask:%8.8x len=%d\n", mask, len);
return len;
}

2. 根据掩码位数获取验码

int len2mask(int len, unsigned int *mask)
{
unsigned int maskwild = 0; if(len<0 || len>32)
return -1; int hostbits=32-len;
while(hostbits--){
maskwild=(maskwild << 1) + 1;
}
maskwild=~maskwild;
if(mask){
*mask = maskwild;
}
printf("mask len is %d, and mask is %8.8x\n", len, maskwild); #if 0
struct in_addr ip;
ip.s_addr=htonl(maskwild);
printf("mask len is %d, and mask is %s\n", len, inet_ntoa(ip));
#endif
return 0;
}

3. 测试结果

void main(int argc, char *argv[])
{
len2mask(9, NULL);
len2mask(15, NULL);
len2mask(24, NULL);
len2mask(28, NULL);
len2mask(30, NULL);
len2mask(32, NULL);
len2mask(34, NULL); mask2len(0x80000000);
mask2len(0xffff0000);
mask2len(0xfffff000);
mask2len(0xffffff00);
mask2len(0xfffffff0);
mask2len(0xfffffffc); mask2len(0x12345678);
}

编译后运行,结果如下:

root@ubantu:/mnt/hgfs/em嵌入式学习记录/schedule调度器# ./demo.out
mask len is 9, and mask is ff800000
mask len is 15, and mask is fffe0000
mask len is 24, and mask is ffffff00
mask len is 28, and mask is fffffff0
mask len is 30, and mask is fffffffc
mask len is 32, and mask is ffffffff
mask:80000000 len=1
mask:ffff0000 len=16
mask:fffff000 len=20
mask:ffffff00 len=24
mask:fffffff0 len=28
mask:fffffffc len=30
mask is not standerd, get mask length error
root@ubantu:/mnt/hgfs/em嵌入式学习记录/schedule调度器#

IPv4掩码与掩码位数的转换的更多相关文章

  1. 子网划分、变长子网掩码和TCP/IP排错__子网、掩码、网络汇总

    1.如何创建子网? 要创建子网,就需要从IP地址的主机部分中借出一定的位,并且保留它们用来定义子网地址.这意味着用于主机的位减少,所以子网越多,可用于定义主机的位越少. 2.子网划分的好处: 1)缩减 ...

  2. SQL生成自动序号 带有占位符(掩码),可以调整占位长度的语句

    MSSQL 语句 --声明变量 DECLARE @i int DECLARE @xh varchar(10) DECLARE @name varchar(10) Set @i = 0 --开始循环插入 ...

  3. 26:IPMaskCheck识别有效的ip地址和掩码并分类统计

    题目描述 请解析IP地址和对应的掩码,进行分类识别.要求按照A/B/C/D/E类地址归类,不合法的地址和掩码单独归类. 所有的IP地址划分为 A,B,C,D,E五类 A类地址1.0.0.0~126.2 ...

  4. UNIX网络编程——socket概述和字节序、地址转换函数

    一.什么是socket socket可以看成是用户进程与内核网络协议栈的编程接口.socket不仅可以用于本机的进程间通信,还可以用于网络上不同主机的进程间通信. socket API是一层抽象的网络 ...

  5. socket概述和字节序、地址转换函数

    一.什么是socket socket可以看成是用户进程与内核网络协议栈的编程接口. socket不仅可以用于本机的进程间通信,还可以用于网络上不同主机的进程间通信. socket API是一层抽象的网 ...

  6. IPv4地址段、地址掩码、可用地址等常用方法

    package com.xxx.iptools; import java.util.ArrayList; import java.util.HashMap; import java.util.List ...

  7. C++ 各种基本类型间的转换

    常用的转换方法: 流转换 STL标准函数库中函数转换 流转换 流转换主要是用到了<sstream>库中的stringstream类. 通过stringstream可以完成基本类型间的转换, ...

  8. python的进制转换二进制,八进制,十六进制及其原理

    #!usr/bin/env python# coding:utf-8def binary(): '''二进制的方法与算法'''    Number = 10    Number1 = 20    Nu ...

  9. C语言 字符串和数字转换函数

    atof(将字符串转换成浮点型数) 相关函数 atoi,atol,strtod,strtol,strtoul 表头文件 #include <stdlib.h> 定义函数 double at ...

随机推荐

  1. 【Flutter学习一】Android的App的三种开发方式

    是时候学习新技术了: 转自:https://blog.csdn.net/qq_41346910/article/details/86692124 移动开发发展到现在,已经出现了三种开发方式.本文我将为 ...

  2. Specify Default JDK on Ubuntu

    sudo update-alternatives --config java will produce: Selection Path Priority Status 0 /usr/lib/jvm/j ...

  3. git命令行or图形化界面?看这篇操作就够了

    我们在自己的私人分支开发好各自的模块后,就要合并到master,这个时候在idea里边先切换到master,然后update一下获取最新更新,解决一下冲突,最后再合并自己的私人分支,add,commi ...

  4. rabbitMQ批量删除指定的队列

    首先进入到rabbitmq目录下的sbin目录 方法1: ./rabbitmqctl list_queues| grep helloQueue | awk '{print $1}' | xargs - ...

  5. MySQL高级查询 & 事务机制

    1.基础查询where 高级条件查询Where子句 SELECT empno,ename,sal,hiredate FROM t_tmp WHERE deptno=10 AND (sal+IFNULL ...

  6. k8s之数据存储-配置存储

    ConfigMap configmap是一种比较特殊的存储卷,它的主要作用是用来存储配置信息的 创建configmap.yaml,内容如下 apiVersion: v1 kind: ConfigMap ...

  7. 关于XSS简单介绍与waf bypass的一些思路整理

    很久没写东西了,今天整理一点儿思路 简单说一下XSS XSS(cross site script)即跨站脚本,侧重于"脚本"这一层概念,是一种常见web安全漏洞.攻击者通过往web ...

  8. 微信小程序开发——后端Java(一)

    一.前言 最近接触了小程序的开发,后端选择Java,因为小程序的代码运行在腾讯的服务器上,而我们自己编写的Java代码运行在我们自己部署的服务器上,所以一开始不是很明白小程序如何与后台进行通信的,然后 ...

  9. NOIP 模拟 $16\; \rm God Knows$

    题解 \(by\;zj\varphi\) 对于这道题,不难想到可以用 \(dp\),就是求一个最小权极长上升子序列 设 \(dp_i\) 表示最后一个选 \(i\) 时,覆盖前 \(i\) 条边的最小 ...

  10. 在JavaScript中安全访问嵌套对象

    大多数情况下,当我们使用JavaScript时,我们将处理嵌套对象,并且通常我们需要安全地访问最里面的嵌套值. 比如: const user = { id: 101, email: 'jack@dev ...