C/C++ PrefixToNetmask、NetmaskToPrefix(网络掩码、Prefix 互转)

作用:

Netmask:255.255.255.0 

互转

Prefix:24

新实现:

            static int                                                          NetmaskToPrefix(unsigned char* bytes, int bytes_size) noexcept {if (NULL == bytes || bytes_size < 1) {return 0;}int prefix = 0;for (int i = 0; i < bytes_size; i++) {int b = bytes[i];while (b) {prefix += b & 1; b >>= 1;}}return prefix;}

源实现:

            static UInt32                                                       PrefixToNetmask(int prefix) noexcept {UInt32 mask = prefix ? (-1L << (32L - prefix)) : 0L;return htonl(mask);}static int                                                          NetmaskToPrefix(UInt32 mask) noexcept {return NetmaskToPrefix(reinterpret_cast<unsigned char*>(&mask), sizeof(mask));}static int                                                          NetmaskToPrefix(unsigned char* bytes, int bytes_size) noexcept {int bitLength = 0;int idx = 0;if (NULL == bytes || bytes_size < 0) {return bitLength;}// find beginning 0xFFfor (; idx < bytes_size && bytes[idx] == 0xff; idx++);bitLength = 8 * idx;if (idx < bytes_size) {switch (bytes[idx]) {case 0xFE: bitLength += 7; break;case 0xFC: bitLength += 6; break;case 0xF8: bitLength += 5; break;case 0xF0: bitLength += 4; break;case 0xE0: bitLength += 3; break;case 0xC0: bitLength += 2; break;case 0x80: bitLength += 1; break;case 0x00: break;default: // invalid bitmaskreturn ~0;}// remainder must be 0x00for (int j = idx + 1; j < bytes_size; j++) {unsigned char x = bytes[j];if (x != 0x00) {return ~0;}}}return bitLength;}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/700667.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

openGauss学习笔记-227 openGauss性能调优-系统调优-其他因素对LLVM性能的影响

文章目录 openGauss学习笔记-227 openGauss性能调优-系统调优-其他因素对LLVM性能的影响 openGauss学习笔记-227 openGauss性能调优-系统调优-其他因素对LLVM性能的影响 LLVM优化效果不仅依赖于数据库内部具体的实现&#xff0c;还与当前所选择的硬件环境等有关。 表达式调用C…

视频监控集中管理的好处

在视频监控建设的进程中&#xff0c;许多单位采用分期、分批的方式进行&#xff0c;不同的部门、项目所采纳的监控系统和平台各有不同。面对这样一个复杂的状况&#xff0c;大型企业经常需应对多平台、多品牌录像机和监控设备的挑战。这无疑给后续的应用管理带来了不小的困扰。…

2.23C语言学习

P1480 A/B Problem 高精度数除以非高精度数 #include<bits/stdc.h> long long b[66660],c[66660],sum0; char a[66660]; int n; int main(){scanf("%s",a);scanf("%d",&n);int lenstrlen(a);for(int i1;i<len;i){b[i]a[i-1]-0;}for(int i1;…

Qt之Qstring元素访问

和之前讲述的访问QByteArray类对象中某个元素的方式类似&#xff0c;访问QString 类对象方式的某个元素采用类似的4种主要方式&#xff0c;分别为[、at&#xff08;&#xff09;、data[]和 constData[]。其中&#xff0c;[]和data[]方式为可读可写&#xff0c;at&#xff08;&a…

【力扣白嫖日记】176.第二高的薪水

前言 练习sql语句&#xff0c;所有题目来自于力扣&#xff08;https://leetcode.cn/problemset/database/&#xff09;的免费数据库练习题。终于把所有的简单题刷完&#xff0c;进入第一道中等题。 今日题目&#xff1a; 176.第二高的薪水 表&#xff1a;Employee 列名类型…

CSS 的圆角矩形

CSS 的圆角矩形 通过 border-radius 属性使矩形边框带圆角效果成为圆角矩形 语法&#xff1a;border-radius: length; length 是内切圆的半径&#xff0c;其数值越大, 弧线越明显 border-radius 属性值描述length定义圆角的形状%以百分比定义圆角的形状 生成圆形 让 border-…

村镇医院医疗中心污废水如何处理达标

污废水处理是村镇医院医疗中心运营中不可忽视的重要环节。如何有效处理污废水&#xff0c;使其达到相关标准&#xff0c;是保障医疗中心环境卫生的关键之一。 首先&#xff0c;村镇医院医疗中心应建立科学的废水处理系统。该系统应包括预处理、初级处理、中级处理和高级处理等环…

整型数组按个位值排序/最低位排序(C语言)

题目来自于博主算法大师的专栏&#xff1a;最新华为OD机试C卷AB卷OJ&#xff08;CJavaJSPy&#xff09; https://blog.csdn.net/banxia_frontend/category_12225173.html 题目描述 给定一个非空数组&#xff08;列表&#xff09;&#xff0c;其元素数据类型为整型&#xff0c…

JVM(1)

JVM简介 JVM是Java Virtual Machine的简称,意为Java虚拟机. 在java中,它归属于jre(java运行时环境), 而jre归属于jdk(java开发工具包). 虚拟机是指通过软件模拟的具有完整硬件功能的,运行在一个完全隔离的环境中的完整计算机系统. 常见的虚拟机:JVM, VMwave, VirtualBox. J…

2024 Impeller:快速了解 Flutter 的渲染引擎的优势

参考原文 &#xff1a;https://tomicriedel.medium.com/understanding-impeller-a-deep-dive-into-flutters-rendering-engine-ba96db0c9614 最近&#xff0c;在 Flutter 2024 路线规划里明确提出了&#xff0c;今年 Flutter Team 将计划删除 iOS 上的 Skia 的支持&#xff0c;…

python 打包 apk

转换之前python代码需要使用指定的框架才能转换&#xff0c;列如&#xff1a;kivy from kivy.app import App from kivy.uix.boxlayout import BoxLayout from kivy.uix.button import Buttonimport time import pyautogui import threadingstatus False# 这是一个将被线程执…

七种设计原则

1.开闭原则&#xff1a;&#xff08;面向对象编程中&#xff0c;最核心最基础的一个原则&#xff0c;所有设计模式都是围绕这一原则去实践&#xff09;对原有的类不做修改&#xff0c;只做扩展 2.单一职责&#xff1a;说的是类的职责要单子。也就是说一个类最好只负责一方面的…

踩坑:SpringBoot连接Mysql的时区报错

解决方法&#xff1a;1.修改时区2.修改连接版本 目录 1.修改时区 2.切换版本 1.修改时区 查看mysql的默认时区 SELECT global.time_zone AS Global Time Zone, session.time_zone AS Session Time Zone; 查看mysqk的默认是时区返回两个结果 Global Time Zone:表示Mysql…

【数据结构】C语言实现二叉树的相关操作

树 定义 树&#xff08;Tree&#xff09;是 n (n > 0) 个结点的有限集 若 n 0&#xff0c;称为空树 若 n > 0&#xff0c;则它满足如下两个条件&#xff1a; 有且仅有一个特定的称为根&#xff08;Root&#xff09;的结点其余结点可分为 m(m>0) 个互不相交的有限…

剪辑视频调色怎么让画质变得清晰 视频剪辑调色技巧有哪些方面 剪辑视频免费的软件有哪些 会声会影调色在哪里 会声会影模板素材

视频调色的作用有很多&#xff0c;除了进行风格化剪辑以外&#xff0c;还可以让作品的画质变得清晰。通过调色来增强画面的清晰度&#xff0c;在观感上也会显得十分自然。视频调色的技巧有很多&#xff0c;并且原理大都十分简单。有关剪辑视频调色怎么让画质变得清晰&#xff0…

Mybatis总结--传参二

#叫做占位符 Mybatis是封装的JDBC 增强版 内部还是用的jdbc 每遇到一个#号 这里就会变为&#xff1f;占位符 一个#{}就是对应一个问号 一个占位符 用这个对象执行sql语句没有sql注入的风险 八、多个参数-使用Param 当 Dao 接口方法有多个参数&#xff0c;需要通过名称使…

Vue3_基础使用_4_路由器Router

概念&#xff1a; 路由&#xff1a;是一个key-value的对应关系叫路由。 路由器&#xff1a;管理多个路由的集合或者叫设备称为路由器。 由于现在组件替代了以前的mvc中的cshtml, 组件的菜单切换也不用我手动去写&#xff0c;vue给我们通过配置完成。 实现简单的路由跳转&…

vue3组件间的通信,通过props,emit,provide和inject把数据传递N个层级,expose和ref实现父组件调用子组件方法

文章目录 一、父组件数据传递N个层级的子组件vue3 provide 与 injectA组件名称 app.vueB组件名称 provideB.vueC组件名称 provideCSetup.vue 二、使用v-model指令实现父子组件的双向绑定父组件名称 app.vue子组件名称 v-modelSetup.vue 三、父组件props向子组件传值子组件 prop…

VIO第3讲:基于优化的IMU与视觉信息融合之预积分残差雅可比推导

VIO第3讲&#xff1a;基于优化的IMU与视觉信息融合之预积分残差雅可比推导 文章目录 VIO第3讲&#xff1a;基于优化的IMU与视觉信息融合之预积分残差雅可比推导4 IMU 预积分残差的雅克比4.1 预积分残差4.2 残差对两个关键帧i、j状态量的雅可比① 速度误差 r v r_{v} rv​对i时刻…

高和汽车停工停产,创始人丁磊终于发话了!2024的冷门项目,投入小,但是真的很赚钱!

高和创始人丁磊站在停产停工的工厂呢&#xff0c; 环顾冷清❄️的四周&#xff0c;眉头紧锁&#x1f623;&#xff0c; 停顿片刻后对旁边同样愁眉苦脸的员工说道&#xff1a; 非常抱歉&#xff0c;因为经营的失误&#xff0c;面临了停产停工的窘境。 在互联网&#x1f517;、物…