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

  1. int mask2len(unsigned int mask)
  2. {
  3. /*eg: 255.255.255.0 255.0.255.255.0*/
  4. int bit=0,len=0;
  5. while( ~mask & (1ULL<<bit))
  6. bit++;
  7. len = 32 - bit;
  8. if(~mask >> bit){
  9. printf("mask is not standerd, get mask length error\n");
  10. return -1;
  11. }
  12. printf("mask:%8.8x len=%d\n", mask, len);
  13. return len;
  14. }

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

  1. int len2mask(int len, unsigned int *mask)
  2. {
  3. unsigned int maskwild = 0;
  4. if(len<0 || len>32)
  5. return -1;
  6. int hostbits=32-len;
  7. while(hostbits--){
  8. maskwild=(maskwild << 1) + 1;
  9. }
  10. maskwild=~maskwild;
  11. if(mask){
  12. *mask = maskwild;
  13. }
  14. printf("mask len is %d, and mask is %8.8x\n", len, maskwild);
  15. #if 0
  16. struct in_addr ip;
  17. ip.s_addr=htonl(maskwild);
  18. printf("mask len is %d, and mask is %s\n", len, inet_ntoa(ip));
  19. #endif
  20. return 0;
  21. }

3. 测试结果

  1. void main(int argc, char *argv[])
  2. {
  3. len2mask(9, NULL);
  4. len2mask(15, NULL);
  5. len2mask(24, NULL);
  6. len2mask(28, NULL);
  7. len2mask(30, NULL);
  8. len2mask(32, NULL);
  9. len2mask(34, NULL);
  10. mask2len(0x80000000);
  11. mask2len(0xffff0000);
  12. mask2len(0xfffff000);
  13. mask2len(0xffffff00);
  14. mask2len(0xfffffff0);
  15. mask2len(0xfffffffc);
  16. mask2len(0x12345678);
  17. }

编译后运行,结果如下:

  1. root@ubantu:/mnt/hgfs/em嵌入式学习记录/schedule调度器# ./demo.out
  2. mask len is 9, and mask is ff800000
  3. mask len is 15, and mask is fffe0000
  4. mask len is 24, and mask is ffffff00
  5. mask len is 28, and mask is fffffff0
  6. mask len is 30, and mask is fffffffc
  7. mask len is 32, and mask is ffffffff
  8. mask:80000000 len=1
  9. mask:ffff0000 len=16
  10. mask:fffff000 len=20
  11. mask:ffffff00 len=24
  12. mask:fffffff0 len=28
  13. mask:fffffffc len=30
  14. mask is not standerd, get mask length error
  15. 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. web知识架构思维导图

    图片双击放大还是很清晰的.原图大小5.1M

  2. noip模拟31[time·game·cover]

    noip模拟31 solutions 我就觉得这些考试题是越考越难,我是也越考越完蛋,已经完完全全的接近爆零了 只有20pts,说真的这还是我第一次挂掉30pts,本来我还有50pts嘞 所以这次考试 ...

  3. JUC学习笔记(三)

    JUC学习笔记(一)https://www.cnblogs.com/lm66/p/15118407.html JUC学习笔记(二)https://www.cnblogs.com/lm66/p/1511 ...

  4. 【python与机器学习实战】感知机和支持向量机学习笔记(一)

    对<Python与机器学习实战>一书阅读的记录,对于一些难以理解的地方查阅了资料辅以理解并补充和记录,重新梳理一下感知机和SVM的算法原理,加深记忆. 1.感知机 感知机的基本概念 感知机 ...

  5. 跟我一起写 Makefile(七)

    使用变量 ---- 在Makefile中的定义的变量,就像是C/C++语言中的宏一样,他代表了一个文本字串,在Makefile中执行的时候其会自动原模原样地展开在所使用的地方.其与C/C++所不同的是 ...

  6. DVWA(一):关于DVWA的基本介绍

    一.关于DVWA的搭建及报错问题: 传送门 上面链接主要解决安装DVWA报错的问题,这里防止自己再去找,所以记一下. (1)安装DVWA需要一个web环境,我实在win2003系统(xss_uploa ...

  7. BZOJ 4826 影魔

    本题可以采用主席树的在线做法,只不过常数会 \(super\) 大. 和其他题解差不多,我们先要求出第 \(i\) 个数的 \(l_i\) 和 \(r_i\) ,其中 \(l_i\) 表示左边第一个比 ...

  8. plsql developer中各个window的作用【转】

    转载自,原文链接: -程序窗口(program window) :可以执行 sql,sqlplus 相关的语句,例如存储过程,方法,一般用来开发程序用的. -测试窗口(test window):一般是 ...

  9. linux 常用命令(二)——(centos6.8-centos7)防火墙的启动、关闭

    centos 6.8 [centos6.5]: 查看chkconfig列表里面是否有iptables的服务: chkconfig | grep iptables 查看防火墙状态: service ip ...

  10. Java程序设计学习笔记(六) — 网络编程

    时间:2016-5-8 02:03 --网络编程        网络传输实际上就是进行数据传输.    一.传输的步骤:        1.对对方IP地址进行定位.        2.将数据打包发送到 ...