C#【必备技能篇】替换一个字节(byte)中连续几位(bit)的内容
文章目录
- 一、一个示例
- 二、通用方法
一、一个示例
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace ConsoleApp1
{class Program{static void Main(string[] args){Method1();}public static void Method1(){// 假设这是你的原始字节 byte originalByte = 0b10101010; // 二进制表示为 10101010 // 假设你想从第3位开始更改接下来的3位(注意:位是从0开始计数的) // 新的值是 011(二进制),它将被放入原始字节的第3到第5位 // 首先,我们需要一个掩码来清除第3到第5位 int V = ~(0b111 << 3);byte mask = (byte)V; // 使用 ~ 操作符创建掩码,这里将 0111 左移3位得到 111000,然后取反得到 000111 Console.WriteLine($"mask: {Convert.ToString(mask, 2).PadLeft(8, '0')}");// 清除原始字节中的旧值 byte clearedByte = (byte)(originalByte & mask); // 现在 clearedByte 在第3到第5位上是0,其他位保持不变 Console.WriteLine($"clearedByte: {Convert.ToString(clearedByte, 2).PadLeft(8, '0')}");// 现在设置新值,将 011 左移3位(因为我们从第3位开始设置) byte newValue = (byte)((0b011 << 3) & 0xFF); // 0xFF 确保结果是一个字节 Console.WriteLine($"newValue: {Convert.ToString(newValue, 2).PadLeft(8, '0')}");// 将新值放入原始字节的相应位置 byte finalByte = (byte)(clearedByte | newValue);// 输出结果 Console.WriteLine($"Original: {Convert.ToString(originalByte, 2).PadLeft(8, '0')}");Console.WriteLine($"Final: {Convert.ToString(finalByte, 2).PadLeft(8, '0')}");Console.ReadLine();}}
}
输出结果:
mask: 11000111
clearedByte: 10000010
newValue: 00011000
Original: 10101010
Final: 10011010
二、通用方法
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace ConsoleApp1
{class Program{static void Main(string[] args){Method2();}private static void Method2(){// 假设这是你的原始字节 byte originalByte = 0b10101010; // 二进制表示为 10101010 // 假设你想从第3位(从0开始计数)开始更改接下来的2位 int startPos = 3;int numBits = 3;// 创建一个掩码来清除目标位 byte mask = (byte)((1 << numBits) - 1); // 创建一个只在最低numBits位为1的掩码 mask = (byte)(mask << startPos); // 将掩码左移startPos位 mask = (byte)(~mask); // 取反掩码,得到要清除的位的掩码 Console.WriteLine($"mask: {Convert.ToString(mask, 2).PadLeft(8, '0')}");// 清除原始字节中的旧值 byte clearedByte = (byte)(originalByte & mask); // 使用mask来清除目标位 Console.WriteLine($"clearedByte: {Convert.ToString(clearedByte, 2).PadLeft(8, '0')}");// 假设这是新的值(以二进制形式表示,但这里我们将其转换为整数) // 例如,新的值是111(二进制),但我们需要左移它以匹配startPos int newValue = 0b111; // 注意:这里newValue是一个int,因为我们稍后会进行左移 newValue = newValue << startPos; // 将newValue左移到正确的位置 Console.WriteLine($"newValue: {Convert.ToString(newValue, 2).PadLeft(8, '0')}");// 注意:newValue现在可能是一个大于byte的int,但我们只关心它的最低8位 // 因此,我们可以直接进行位或操作,因为byte类型在C#中会自动进行模256操作 byte finalByte = (byte)(clearedByte | (byte)newValue);// 输出结果 Console.WriteLine($"Original: {Convert.ToString(originalByte, 2).PadLeft(8, '0')}");Console.WriteLine($"Final: {Convert.ToString(finalByte, 2).PadLeft(8, '0')}");Console.ReadLine();}}
}
输出结果:
mask: 11000111
clearedByte: 10000010
newValue: 00111000
Original: 10101010
Final: 10111010
相关文章:
C#【必备技能篇】替换一个字节(byte)中连续几位(bit)的内容
文章目录 一、一个示例二、通用方法 一、一个示例 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace ConsoleApp1 {class Program{static void Main(string[] args){Method1();}public static…...
roboguide将tp程序转化为LS文本格式的方法
不同的软件版本可能操作不同,但是仍然可以参考文章中的办法。 我使用的版本如图所示: 1.首先,打开任意一个工程,如果没有,可以打开自带的示例。 如图,我打开了自带的示例,在帮助文档中可以找到…...
基于SpringBoot+Vue+MySQL的流浪猫狗宠物救助救援网站管理系统
系统展示 用户前台界面 管理员后台界面 系统背景 在当今社会,随着宠物数量的激增及人们关爱动物意识的提升,流浪猫狗问题日益严峻。为解决这一问题,构建一套高效、便捷的流浪猫狗宠物救助救援网站管理系统显得尤为重要。本系统基于SpringBoot…...
I/O 多路复用:`select`、`poll`、`epoll` 和 `kqueue` 的区别与示例
I/O 多路复用是指在一个线程内同时监控多个文件描述符(File Descriptor, FD),以便高效地处理多个 I/O 事件。在 UNIX/Linux 和 BSD 系统中,select、poll、epoll、kqueue 都是实现 I/O 多路复用的系统调用。它们各有特点࿰…...
大数据之Flink(三)
9.3、转换算子 9.3.1、基本转换算子 9.3.1.1、映射map 一一映射 package transform;import bean.WaterSensor; import org.apache.flink.streaming.api.datastream.DataStreamSource; import org.apache.flink.streaming.api.datastream.SingleOutputStreamOperator; impor…...
【HCIA-Datacom】IPv4地址介绍
| | 👉个人主页:Reuuse 希望各位多多支持!❀ | 👉HCIA专栏博客 | 最后如果对你们有帮助的话希望有一个大大的赞! | ⭐你们的支持是我最大的动力!⭐ | 目录 IPv4地址定义IPv4地址分类方式二级目录三级目录 I…...
maven父子工程多模块如何管理统一的版本号?
1.为什么要统一管理? maven父子工程多模块,每个模块还都可以独立存在,子模块往往通常希望和父工程保持一样的版本,如果每个工程单独定义版本号,后期变更打包也非常麻烦,如何维护一个全局的版本号呢&#x…...
JavaScript --函数的作用域(全局和局部)
全局作用域 全局作用域,就算不在一个script标签也能调用 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta nam…...
贪吃蛇项目实现(C语言)——附源码
前言 贪吃蛇是一款十分经典的游戏,其通过控制贪吃蛇的上下左右移动来吃食物,延长自己的身体,也会因为撞到墙体和自身而死亡。下面我们通过C语言来实现贪吃蛇。 1.技术要点 C语言枚举,结构体,链表,动态内…...
【C++】42道面试经典问题总结
C this指针是干什么用的? 假如一个类型定义了很多对象,类里面有很多定义的私有成员变量,共享一套成员方法。通过this指针这可以区分方法、变量是操作的哪个对象的。 C的new和delete,new[]和delete[]可以混用吗? 一般来…...
php 实现JWT
在 PHP 中,JSON Web Token (JWT) 是一种开放标准 (RFC 7519) 用于在各方之间作为 JSON 对象安全地传输信息。JWT 通常用于身份验证系统,如 OAuth2 或基于令牌的身份验证。 以下是一个基本的 PHP 实现 JWT 生成和验证的代码示例。 JWT 的组成部分 JWT …...
vue table id一样的列合并
合并场景:如果id一样,则主表列合并,子表列不做合并,可实现单行、多行合并,亲测!!! 展示效果如图示: 组件代码: // table组件 :span-method"objectSpa…...
xshell密钥方式连接阿里云Linux
前提条件 有阿里云ECS linux实例安装好xshell工具 步骤 创建密钥对并绑定ECS实例 浏览器登录阿里云-->控制台-->ECS服务器-->网络与安全-->密钥对-->创建密钥对 根据提示填写密钥名称-->选中默认资源组-->创建 创建完成,会自动下载密钥对的…...
Wni11 下 WSL 安装 CentOS
Wni11 下 WSL 安装 CentOS 方法一、安装包安装下载包安装安装打开 CentOS1. 从 Windows 终端 打开2. 从 PowerShell 打开 方法二、导入 CentOS 的 tar 文件进行安装0. 查看版本(可选)1. 导出 Docker 容器到 tar 文件2. 将 tar 文件导入 WSL2.1. 导入 tar…...
ROADM(可重构光分插复用器)-介绍
1. 引用 https://zhuanlan.zhihu.com/p/163369296 https://zhuanlan.zhihu.com/p/521352954 https://zhuanlan.zhihu.com/p/91103069 https://zhuanlan.zhihu.com/p/50610236 术语: 英文缩写描述灰光模块彩光模块CWDM:Coarse Wave-Length Division …...
HarmonyOS开发之路由跳转
文章目录 一、路由跳转模式与实例1.router.pushUrl2.router.replaceUrl3.router.back 一、路由跳转模式与实例 跳转模式 有点类似于vue的路由跳转 router.pushUrl 保留路由栈,保留当前的页面;router.replaceUrl 销毁当前页面,跳转一个新的页…...
怎么使用ai 免费生成ppt?这4个工具可以帮忙
随之AI工具的流行,网络上也涌现了一批 AIPPT 工具,可以在办公上帮助我们节省很多制作PPT的时间。通常它们的操作也比较简单,所以适合很多人使用。为了可以帮助大家提高办公效率,我在这里跟大家分享4款可以免费使用的AIPPT制作工具…...
Android主副屏显示-Android13
Android主副屏显示-Android13 1、DisplayDeviceInfo屏幕信息2、每个屏幕对应LogicalDisplay2.1 LogicalDisplay添加对应DisplayContent2.2 configureDisplayLocked刷新 DisplayManagerService启动及主屏添加-Android13 1、DisplayDeviceInfo屏幕信息 DisplayManagerService启动…...
什么是 SMB 服务器以及它如何工作?
在本文中,您将了解 SMB 服务器以及它们如何促进网络文件共享。 我们将介绍它们的基本功能、主要特性以及如何安全地设置它们。无论您是新手还是需要复习,本指南都将帮助您更好地了解 SMB 服务器。 什么是 SMB 服务器? SMB(服务器…...
【python计算机视觉编程——10.OpenCV】
python计算机视觉编程——10.OpenCV 10.OpenCV10.2 OpenCV基础知识10.2.1 读取和写入图像10.2.2 颜色空间10.2.3 显示图像及结果 10.3 处理视频10.3.1 视频输入10.3.2 将视频读取到NumPy数组中 10.4 跟踪10.4.1 光流10.4.2 Lucas-Kanade算法使用跟踪器使用发生器 10.5 更多示例…...
应用升级/灾备测试时使用guarantee 闪回点迅速回退
1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间, 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点,不需要开启数据库闪回。…...
Zustand 状态管理库:极简而强大的解决方案
Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...
Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)
概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...
Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...
Java - Mysql数据类型对应
Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...
【单片机期末】单片机系统设计
主要内容:系统状态机,系统时基,系统需求分析,系统构建,系统状态流图 一、题目要求 二、绘制系统状态流图 题目:根据上述描述绘制系统状态流图,注明状态转移条件及方向。 三、利用定时器产生时…...
Linux-07 ubuntu 的 chrome 启动不了
文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...
MySQL JOIN 表过多的优化思路
当 MySQL 查询涉及大量表 JOIN 时,性能会显著下降。以下是优化思路和简易实现方法: 一、核心优化思路 减少 JOIN 数量 数据冗余:添加必要的冗余字段(如订单表直接存储用户名)合并表:将频繁关联的小表合并成…...
C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...
解析“道作为序位生成器”的核心原理
解析“道作为序位生成器”的核心原理 以下完整展开道函数的零点调控机制,重点解析"道作为序位生成器"的核心原理与实现框架: 一、道函数的零点调控机制 1. 道作为序位生成器 道在认知坐标系$(x_{\text{物}}, y_{\text{意}}, z_{\text{文}}…...
