C# 字节(数组)与位之间的计算
C# 字节(数组)\16\32\64…位数据与位之间的计算
运算符介绍
运算名称 | 运算符号 |
---|---|
左移 | << |
右移 | >> |
与 | & |
或 | | |
非 | ^ |
截取数据
例如:
UInt32 mini = 0x000ED0FF;UInt16 low16 = (UInt16)(mini & 0xFFFF);UInt16 hight16 = (UInt16)((mini>>16) & 0xFFFF);byte low16lowByte = (byte)(mini & 0xFF);byte low16HighByte = (byte)((mini >> 8) & 0xFF);byte high16lowByte = (byte)(mini>>16 & 0xFF);byte high16HighByte = (byte)((mini >> 24) & 0xFF);
扩展总结:
截取数据时,从数据源中的x位(计数从0开始)开始,连续截取y位。
公式为:
目标数据类型 result =(强转为目标类型)((数据源>>x)&yHex)
注:yHex表示将y个1(2进制)转换成16进制
例如:从一个32位无符号数据:0x000ED0FF中的第2位开始,截取11位的数据为:
UInt16 res = (UInt16)((mini >> 2) & 0x07FF);
拼装数据
在实际应用开发过程中,我们需要解析和拼装数据,拼装数据多数情况下是将不规则的数据组装成规整的字节数组。下面我们研究下如何将多个信息拼装到某一个字节或者多个连续字节中。
将下面三个数据拼装到单个字节中。
byte a ,byte b , byte c。
其组装到目标字节的结构如下表所示:
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|
a | a | a | a | - | b | - | c |
a占用高4位,b占用第2位,c占用第0位
示例代码如下所示:
// 1.获取待拼接数据byte a = 0x09;byte b = 0x01;byte c = 0x01;// 2.将拼接数据按位切分(保证数据完整性,防止溢出),然后移动到目标位byte hh = (byte)((a & 0x0F) << 4);byte mm = (byte)((b & 0x01) << 2);byte ll = (byte)((c & 0x01) << 0);// 3.通过或运算“|”拼接byte result = (byte)(hh | mm | a | ll);
拼接过程如上面代码,很清晰地进行了阐述。
强调一点:在第2步中,与运算“&”目的是为了规整数据【保证其结果最大不过后面与上的值】,保证后面在做与运算时,拼接数据的准确性。
整理公式:
目标类型 result =(强转为目标类型)( ((a1 & Ha1) <<Ca1) | ((a2 & Ha2) <<Ca2) | … | ((an & Han) <<Can) )
其中:
a1=第一个数据;
HCa1=第一个数据在目标数据中占位数个1的16进制数;
Ca1=第一个数据在目标数据中的最低位的坐标标记;
a2=第二个数据;
HCa2=第二个数据在目标数据中占位数个1的16进制数;
Ca2=第二个数据在目标数据中的最低位的坐标标记;
…
an=第n个数据;
HCan=第n个数据在目标数据中占位数个1的16进制数;
Can=第n个数据在目标数据中的最低位的坐标标记;
应用:
将下面四个数据,分别保存到一个包含两个字节的字节数组中。其格式如下所示
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
---|---|---|---|---|---|---|---|---|
0 | - | a | a | b | c | c | c | c |
1 | c | c | c | c | c | c | c | d |
示例代码:
byte a = 0x00;byte b = 0x01;UInt16 c = 0x0921;byte d = 0x01;byte[] result = { 0x00, 0x00 };// 取全部数据 并移动到第一个字节【高】的对应位置UInt16 aa = (UInt16)((a & 0x03) << 5);UInt16 bb = (UInt16)((b & 0x01) << 4);// 取c的高4位[从第7位开始,取4位],第一个字节尾部,不做移动UInt16 hc = (UInt16)((c >> 7) & 0x0F);// 取c的低7位,并左移1位,并移动到第二个字节【低】的对应位置UInt16 lc = (UInt16)((c & 0x7F) << 1);// 取d的全部数据(1位),第二个字节尾部,不做移动UInt16 dd = (UInt16)((d & 0x01) << 0);// 【高】字节result[0] = (byte)(aa | bb | hc);// 【低】字节result[1] = (byte)(lc | dd);
注意:在拆分c变量时,截取数据一定要准确。如果左移或者右移0位的操作可以不写。
C# 字节(数组)与位之间的计算相关推荐
- 在线工具 字节、比特、Kb单位转换器(Gb,Mb,Kb,字节,比特位之间的转换)
本文主要提供一种在线的字节单位转换工具,其主要作用在于为Gb,Mb,Kb,字节,比特位之间的转换提供便利, 链接如下: http://www.elecfans.com/tools/zijiehuans ...
- c# 流,字节数组及字符串之间的转换
//1.流转换为字节数组,fileUpload为.net上传控件 Stream stream = fileUpload.FileContent; byte[] fileBuffer = new byt ...
- C#字节数组和字符数组与字符串之间的转换
1.marshal类,提供了一些方法集合,如分配非托管内存,拷贝非托管内存,转换托管和非托管类型,以及一些和非托管代码交互的杂类方法 //分配非托管内存 IntPtr hglobal = Marsha ...
- java byte数组转化为流_java中字节数组和字符串、IO流和字节数组之间的转换
在实际开发中经常会碰到乱码问题: 首先查看系统支持的编码方式,默认的编码方式 //检查java支持的编码 System.out.println(Charset.availableCharsets(). ...
- js 字节数组操作,TCP协议组装
js字节数组,进制转换 js基础知识 数组 Array json对象转化为key,value的对象数组 创建全为0的数组的几种方法 扩展操作符三个点(...) ArrayBuffer Array 与 ...
- js 字节数组转数字以及数字转字节数组
avascript通过ArrayBuffer和DataView实现字节数组和数字之间的相互转换 注意!我这里的所有函数用的都是大端字节序(高位在前,低位在后),即数据的高字节,保存在内存的低地址中,而 ...
- Unity联网游戏基础原理与字节数组
如果你要制作一个能联网的游戏,无论是网络游戏还是局域网游戏都离不开网络通信,网络游戏一般是一个服务器对应多个客户端,如图: 多个玩家访问一台服务器,每个玩家实际上是一个客户端,在这里我们列举两个小例子 ...
- Java 字节数组和字符串的相互转化
Java:字节数组和字符串的相互转化 将字符串转化为字节数组: 创建需要转化的字符串 创建Byte数组,使用 getByets() 方法获取字符串的字节数 循环遍历,判断条件可以使用字节数组的 len ...
- 64位字长的高性能微型计算机,地址总线字长内存容量寻址范围之间的计算
地址总线,字长,内存容量,寻址范围 之间的计算 处理机字长是指处理机能同时处理(或运算)的位数,即同时处理多少位(bit)数据.比如Intel Pentium 4处理器字长为32位,它能同时处理32位 ...
- 字节转换比特位c语言,C语言实现双字节在数组中按比特位移动
先说一下应用场合,在LED点阵显示屏中,为了节省flash空间,常用一个bit位来标记哪个灯是否点亮.为了做出比较炫的效果,比如16 * 16像素gif动画边边移动边跳跃.就应用到该思想. 双字节是1 ...
最新文章
- java添加删除用户信息泄露_java删除用户404错误!!神奇!增改查都没问题啊!!...
- 第一百三十六期:详细讲解 Redis 的两种安装部署方式
- python的变量名有哪些_【python字符串做变量名的方法有哪些?这些方法对python应用很重要】- 环球网校...
- Python二分查找/折半查找算法详解--(面试常考)
- TreeView控件 1202
- binlog2sql使用总结
- maven仓库的安装与配置
- 一文读懂babel编译流程,再也不怕面试官的刁难了
- 湖北二级计算机考试时间2015年,2015上半年湖北计算机等级考试时间
- 设计模式(十一):享元模式
- Http请求之基于HttpUrlConnection,支持Header,Body传值,支持Multipart上传文件:
- Homebrew安装gcc:curl: (60) SSL certificate problem: certificate has expired
- C语言课程设计报告-菜单设计
- jemalloc 深入分析 之 Tcache 实现原理
- 伪标签(Pseudo-Labelling)介绍:一种半监督机器学习技术
- Java服务端接入苹果内购。实现票据二次校验、自动续期订阅
- T1076 正常血压(信息学一本通C++)
- ONLYOFFICE历史版本开发技术之三
- 纳芯微携手企企通,打造全新数字化采购管理系统
- 【LaTex】三线表加粗
热门文章
- mac怎么压缩pdf文件最小
- Excel中纵向查找函数-VLOOKUP函数
- 函数-6已知输入为一个列表,列表中的元素都为整数,我们定义元素筛选函数为foo,功能是检查获取传入列表对象的所有奇数位索引(注意列表的索引是从0开始的)对应的元素,并将其作为新列表返回给调用者。
- 2022怎么注册谷歌?手机号无法用于验证谷歌Gmail的成功解决方法
- 2008年全国大学生数学建模D题(加附件)
- veeam的备份策略(每周6增量备份,每周日合成全量备份)
- 游戏盾SDK的防护介绍
- 全新 16 核神经网络引擎,a13神经网络处理器
- 轻松拥有美国号码,免费收发短信
- 大巧不工,袋鼠云正式开源大数据任务调度平台——Taier(太阿)