当前位置: 首页 > news >正文

C# 之工控机数据类型 高低位(大小端)、BitConverter、IsLittleEndian、字节数组转换(高低位)

八种基本数据类型:byte、short、int、long、float、double、boolean、char

byte

8位、有符号的以二进制补码表示的整数
min : -128(-2^7)
max: 127(2^7-1)
default: 0
对应包装类:Byte
在这里插入图片描述

short

16位、有符号的以二进制补码表示的整数
min : -32768(-2^15)
max: 32767(2^15 - 1)
default: 0
对应包装类:Short

int

32位、有符号的以二进制补码表示的整数
min : -2,147,483,648(-2^31)
max: 2,147,483,647(2^31 - 1)
default: 0
对应包装类:Integer

long

64位、有符号的以二进制补码表示的整数
min : -9,223,372,036,854,775,808(-2^63)
max: 9,223,372,036,854,775,807(2^63 -1)
default: 0
对应的包装类:Long

float

单精度、32位、符合IEEE 754标准的浮点数
float 在储存大型浮点数组的时候可节省内存空间
浮点数不能用来表示精确的值,如货币 要用 decimal
default: 0.0f
对应的包装类:Float

double

双精度、64位、符合IEEE 754标准的浮点数
浮点数的默认类型为double类型
double类型同样不能表示精确的值,如货币
default: 0.0d
对应的包装类:Double

char 一个字节 8位

char类型是一个单一的 16 位 Unicode 字符
最小值是 \u0000(即为0)
最大值是 \uffff(即为65,535)
char 数据类型可以储存任何字符
对应的包装类:Character

boolean

boolean数据类型表示一位的信息
只有两个取值:true 和 false
这种类型只作为一种标志来记录 true/false 情况
对应的包装类:Boolean

BitConverter.IsLittleEndian

BitConverter.IsLittleEndian
》》True 小端高端 存储数据
》》False 高端低端 存储数据

大小端转换

因Modbus协议 都是高位地位请求,发送 数据的
在这里插入图片描述
BitConverter.IsLittleEndian 本人电脑显示 True, 则 表示 数据存储是 地位 高位 方式存储在电脑之中的

int 300 对应的 二进制 0000 0001 0010 1100

在这里插入图片描述

如果用 高位 地位 方法存储

在这里插入图片描述

//方法1private ushort ReversalHighLow(ushort val){if (BitConverter.IsLittleEndian){byte[] arrSrc = BitConverter.GetBytes(val);byte[] arrDst = new byte[arrSrc.Length];arrDst[0] = arrSrc[1];arrDst[1] = arrSrc[0];return BitConverter.ToUInt16(arrDst, 0);}else{return val;}}// 调用ushort st = ReversalHighLow(300);//方法二private ushort ReversalHighLow(ushort val){if (BitConverter.IsLittleEndian){byte high = (byte)((val - val % 256) / 256);  //数字减去 低8位, 得到的数字再除以256得到高8位byte low = (byte)(val % 256);  //数字对256取余数, 得到低8位byte[] change1 = { high, low };return BitConverter.ToUInt16(change1,0);}else{return val;}}// 调用ushort st = ReversalHighLow(300);//方法三private ushort ReversalHighLow(ushort val){if (BitConverter.IsLittleEndian){byte[] bytes = BitConverter.GetBytes(val);Array.Reverse(bytes);return BitConverter.ToUInt16(bytes, 0);}else{return val;}}// 调用ushort st = ReversalHighLow(300);//方法3 private ushort ReversalHighLow(ushort val){if (BitConverter.IsLittleEndian){// 右移8位获取高字节byte highByte = (byte)(val >> 8); // &是按位与运算符(同时1则1,否则0),// 与16位,高8位是000000000, 低8位是 11111111    (是高位低位方式存储)// 16位 ,OXFF:0000000011111111               (是高位低位方式存储)            byte lowByte = (byte)(val & 0xFF); byte[] bytes = { highByte, lowByte };return BitConverter.ToUInt16(bytes,0);}else{return val;}}// 调用ushort st = ReversalHighLow(300);

字节数组转换 bool数组

在这里插入图片描述

在这里插入图片描述

 private List<bool> GetBitFromByte(byte[] val ){List<bool> bits = new List<bool>();for (int i = 0; i < val.Length; i++){if (BitConverter.IsLittleEndian){for (int j = 7; j >= 0; j--){bits.Add((val[i] & 1) == 1);val[i] >>= 1;}}else{for (int j = 0; j <= 7; j++){bits.Add((val[i] & 1) == 1);val[i] >>= 1;}}}return bits;}//调用List<bool> bts = GetBitFromByte(BitConverter.GetBytes((ushort)500));

字节数组转成short

在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Redis 主从复制、哨兵机制关键参数与命令
  • Spring Boot + Spring Cloud 入门
  • java模拟多ip请求【搬代码】
  • 基于STM32的农业大棚温湿度采集控制系统的设计
  • git实现多人协作开发同一个项目
  • 100个python的基本语法知识【下】
  • 【洛谷】P2241 统计方形(数据加强版)——C++
  • dockerfile部署wordpress
  • 【CTFWP】ctfshow-萌新-web1-7
  • html+css前端作业 王者荣耀官网6个页面无js
  • iOS应用冷启动优化,可以做哪些事情
  • ArcGIS Pro SDK (九)几何 12 多面体
  • 决策树的概念
  • 挖掘IPython的深度:%%dhist命令的历史探索之旅
  • Chapter17 表面着色器——Shader入门精要学习
  • 10个确保微服务与容器安全的最佳实践
  • create-react-app项目添加less配置
  • docker容器内的网络抓包
  • Gradle 5.0 正式版发布
  • Laravel5.4 Queues队列学习
  • Nginx 通过 Lua + Redis 实现动态封禁 IP
  • nginx(二):进阶配置介绍--rewrite用法,压缩,https虚拟主机等
  • Nodejs和JavaWeb协助开发
  • node入门
  • Traffic-Sign Detection and Classification in the Wild 论文笔记
  • vue:响应原理
  • win10下安装mysql5.7
  • 创建一个Struts2项目maven 方式
  • 让你成为前端,后端或全栈开发程序员的进阶指南,一门学到老的技术
  • 使用Envoy 作Sidecar Proxy的微服务模式-4.Prometheus的指标收集
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 我有几个粽子,和一个故事
  • 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google ...
  • ​Benvista PhotoZoom Pro 9.0.4新功能介绍
  • ​LeetCode解法汇总1410. HTML 实体解析器
  • ​用户画像从0到100的构建思路
  • #### go map 底层结构 ####
  • #{} 和 ${}区别
  • #etcd#安装时出错
  • #进阶:轻量级ORM框架Dapper的使用教程与原理详解
  • (07)Hive——窗口函数详解
  • (HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕
  • (层次遍历)104. 二叉树的最大深度
  • (附源码)spring boot校园拼车微信小程序 毕业设计 091617
  • (附源码)计算机毕业设计ssm基于Internet快递柜管理系统
  • (论文阅读31/100)Stacked hourglass networks for human pose estimation
  • (七)Appdesigner-初步入门及常用组件的使用方法说明
  • (学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解
  • (一)插入排序
  • (转)关于pipe()的详细解析
  • .DFS.
  • .halo勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .Net 8.0 新的变化
  • .net 提取注释生成API文档 帮助文档
  • .NET 药厂业务系统 CPU爆高分析