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 ...
随机推荐
- Dubbo 实现一个Load Balance (用于灰度发布)
Dubbo 可以实现的扩展很多, 官方文档在这: https://dubbo.apache.org/zh/docs/v2.7/dev/impls/ (太简单了....) 下面我们实现一个Load Ba ...
- Android性能优化——性能优化的难题总结
前言 现在都在谈性能优化或者在面试的时候被问到性能优化相关问题,那么我们为什么要做性能优化呢?以及性能优化的难点是什么?在整个项目周期中不同的阶段该做什么?优化效果如何长期保持?作为一名Android ...
- Nginx 配置错误导致漏洞
目录 1.CRLF注入漏洞 2.目录穿越漏洞 参考链接 1.CRLF注入漏洞 CRLF是"回车+换行"(\r\n)的简称,其十六进制编码分别为0x0d和0x0a.先看payload ...
- Android面试官:说说你对 Binder 驱动的了解?
面试官提了一个问题:说说你对 binder 驱动的了解.这个问题虽有些 "面试造火箭" 的无奈,可难点就是亮点.价值所在,是筛选面试者的有效手段.如果让你回答,你能说出多少呢?我们 ...
- 1002 A+B for Polynomials (25分) 格式错误
算法笔记上能踩的坑都踩了. #include<iostream> using namespace std; float a[1001];//至少1000个位置 int main(){ in ...
- Spring源码解析之ConfigurationClassPostProcessor(一)
ConfigurationClassPostProcessor 在前面一个章节,笔者和大家介绍了在构造一个应用上下文时,spring会执行到PostProcessorRegistrationDeleg ...
- pikachu Unsafe Filedownload 不安全的文件下载
不安全的文件下载概述文件下载功能在很多web系统上都会出现,一般我们当点击下载链接,便会向后台发送一个下载请求,一般这个请求会包含一个需要下载的文件名称,后台在收到请求后 会开始执行下载代码,将该文件 ...
- ARM的九种寻址方式
文章目录 1.立即数寻址 2.寄存器寻址 3.寄存器间接寻址 4.寄存器偏移寻址 5.寄存器基址变址寻址 6.批量寄存器寻址 7.相对寻址 8.堆栈寻址 9.块拷贝寻址 寻址方式就是CPU根据指令中的 ...
- Windows内核-7-(IRP)I/O请求包
Windows内核-7-(IRP)I/O请求包 IRP(I/O Request Packet)就是一个进行I/O操作的请求包. IRP是一个结构体,谁分配谁就得释放,通常由执行体里的管理器,获取内核驱 ...
- 面对对象4 Mixins机制 内置方法 反射 异常
Mixins机制 为什么要有:子类继承父类的时候,可能会碰到需要继承多个父类的情况,那么继承关系也分主类和辅类,既保持主类的功能,也有辅类的功能. 命名方式,我们需要将主类和辅类区分开来,python ...