IPv4掩码与掩码位数的转换
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掩码与掩码位数的转换的更多相关文章
- 子网划分、变长子网掩码和TCP/IP排错__子网、掩码、网络汇总
1.如何创建子网? 要创建子网,就需要从IP地址的主机部分中借出一定的位,并且保留它们用来定义子网地址.这意味着用于主机的位减少,所以子网越多,可用于定义主机的位越少. 2.子网划分的好处: 1)缩减 ...
- SQL生成自动序号 带有占位符(掩码),可以调整占位长度的语句
MSSQL 语句 --声明变量 DECLARE @i int DECLARE @xh varchar(10) DECLARE @name varchar(10) Set @i = 0 --开始循环插入 ...
- 26:IPMaskCheck识别有效的ip地址和掩码并分类统计
题目描述 请解析IP地址和对应的掩码,进行分类识别.要求按照A/B/C/D/E类地址归类,不合法的地址和掩码单独归类. 所有的IP地址划分为 A,B,C,D,E五类 A类地址1.0.0.0~126.2 ...
- UNIX网络编程——socket概述和字节序、地址转换函数
一.什么是socket socket可以看成是用户进程与内核网络协议栈的编程接口.socket不仅可以用于本机的进程间通信,还可以用于网络上不同主机的进程间通信. socket API是一层抽象的网络 ...
- socket概述和字节序、地址转换函数
一.什么是socket socket可以看成是用户进程与内核网络协议栈的编程接口. socket不仅可以用于本机的进程间通信,还可以用于网络上不同主机的进程间通信. socket API是一层抽象的网 ...
- IPv4地址段、地址掩码、可用地址等常用方法
package com.xxx.iptools; import java.util.ArrayList; import java.util.HashMap; import java.util.List ...
- C++ 各种基本类型间的转换
常用的转换方法: 流转换 STL标准函数库中函数转换 流转换 流转换主要是用到了<sstream>库中的stringstream类. 通过stringstream可以完成基本类型间的转换, ...
- python的进制转换二进制,八进制,十六进制及其原理
#!usr/bin/env python# coding:utf-8def binary(): '''二进制的方法与算法''' Number = 10 Number1 = 20 Nu ...
- C语言 字符串和数字转换函数
atof(将字符串转换成浮点型数) 相关函数 atoi,atol,strtod,strtol,strtoul 表头文件 #include <stdlib.h> 定义函数 double at ...
随机推荐
- 【问题记录】- 谷歌浏览器 Html生成PDF
起因: 由于项目需要实现将网页静默打印效果,那么直接使用浏览器打印功能无法达到静默打印效果. 浏览器打印都会弹出预览界面(如下图),无法达到静默打印. 解决方案: 谷歌浏览器提供了将html直接打印成 ...
- vue的table切换
HTML: <div id="box"> <ul> <li v-for="(item,index) in items" v-tex ...
- MFC对文件文件夹转移、删除、重命名、复制【转】
HFileOperation()函数主要对文件夹有四种操作:复制,删除,移动,重命名. 写了四个函数.可以很好的对文件夹进行操作. //函数名:MoveFolder //参数:lpszFromPath ...
- .NET Core/.NET5/.NET6 开源项目汇总13:模板引擎
系列目录 [已更新最新开发文章,点击查看详细] 开源项目是众多组织与个人分享的组件或项目,作者付出的心血我们是无法体会的,所以首先大家要心存感激.尊重.请严格遵守每个项目的开源协议后再使用.尊 ...
- rabbitMQ批量删除指定的队列
首先进入到rabbitmq目录下的sbin目录 方法1: ./rabbitmqctl list_queues| grep helloQueue | awk '{print $1}' | xargs - ...
- QT从入门到入土(八)——项目打包和发布
引言 新手上路可谓是困难重重,你永远不知道下一个困难会在什么时候出现,在完成了运动控制卡封装发布过程中可谓是举步维艰.因此记录一下qt5+vs2019的打包发布方法. 打包一般分为两步: 将编译后的e ...
- Pikachu-XSS模块与3个案例演示
一.概述 XSS是一种发生在前端浏览器端的漏洞,所以其危害的对象也是前端用户. 形成XSS漏洞的主要原因是程序对输入和输出没有做合适的处理,导致"精心构造"的字符输出在前端时被浏览 ...
- BeautifulSoup4的使用
一.介绍 Beautiful Soup 主要是用来解析提取 HTML 和 XML 文件中的数据. 现在官网推荐使用 Beautiful Soup 4 ,已经被移植到了BS4中. 安装 Beautifu ...
- 启动Django报错:SyntaxError: Generator expression must be parenthesized 解决办法
这是因为版本不兼容所导致的. 此错误已知与Python问题#32012相关.基于Django 1.11.16及以下的项目将在Python 3.7启动时引发此异常.此问题的补丁已合并到Django 2. ...
- NOIP 模拟 $27\; \rm 牛半仙的妹子图$
题解 \(by\;zj\varphi\) 颜色数很少,考虑枚举颜色数. 建出来一棵最小生成树,可以证明在最小生成树上,一个点到另一个点的路径上的最大权值最小(易证,考虑 \(\rm kruskal\) ...