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

news2024/9/19 6:36:52

八种基本数据类型: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

在这里插入图片描述

如果用 高位 地位 方法存储

在这里插入图片描述

//方法1
 private 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

在这里插入图片描述

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

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

相关文章

将微信聊天记录导出成html等格式

通过github上的开源项目WechatMsg&#xff0c;可以将微信中的聊天记录&#xff08;包括文字、图片、语音、表情包甚至拍一拍&#xff09;导出&#xff0c;方便我们随时分享和查看&#xff0c;此外还有聊天记录分析等有趣的功能&#xff0c;感兴趣的小伙伴可以研究一下。我个人认…

静态网站怎么更新数据

今天看到个问题 我不是行业从业者&#xff0c;但目前遇到一个问题 我公司网站为纯静态&#xff0c;除了直接从html里修改文字外能不能这样 建立一个xml或者txt文档&#xff0c;其中有很多信息&#xff0c;例如网站名称&#xff0c;电话&#xff0c;备案号等&#xff0c;一行一行…

AI赋能项目集成:我的实战经验与洞见

背景 在传统的教学模式中&#xff0c;教师往往难以兼顾每位学生的个性化需求&#xff0c;学习信息的收集与分析也受限于时间和精力的限制&#xff0c;难以做到全面而深入。然而&#xff0c;每位学生都是独一无二的个体&#xff0c;他们拥有不同的学习风格、兴趣偏好以及理解能…

【IC前端虚拟项目】sanity_case的编写与通包测试

【IC前端虚拟项目】数据搬运指令处理模块前端实现虚拟项目说明-CSDN博客 在花了大力气完成reference model之后,整个验证环境的搭建就完成了,再多看一下这个结构然后就可以进行sanity_case和通包测试: 关于sanity_case和通包测试我在很多篇文章中说过好多次了在这里就不赘述…

如何安装Visual Studio Code

Visual Studio Code&#xff08;简称 VS Code&#xff09; Visual Studio Code 是一款由微软开发的免费、开源的现代化轻量级代码编辑器。 主要特点包括&#xff1a; 跨平台&#xff1a;支持 Windows、Mac 和 Linux 等主流操作系统&#xff0c;方便开发者在不同平台上保持一…

ETL电商项目总结

ETL电商项目总结 ETL电商业务简介及各数据表关系 业务背景 ​ 本案例围绕某个互联网小型电商的订单业务来开发。某电商公司&#xff0c;每天都有一些的用户会在线上采购商品&#xff0c;该电商公司想通过数据分析&#xff0c;查看每一天的电商经营情况。例如&#xff1a;电商…

科普文:字节码class文件和字节码增强技术

1. 引言 1.1. 什么是字节码 Java字节码是指Java语言编译后生成的一种二进制文件格式&#xff0c;它包含了Java程序的所有信息&#xff0c;包括类信息、方法信息、变量信息等。字节码是Java程序执行的基础&#xff0c;它被用于实现Java虚拟机&#xff08;JVM&#xff09;的加载…

随手记:vsCode修改主题色为自定义颜色

因为工作需要长时间面对vscode&#xff0c;视力不好&#xff0c;想要把工具改成护眼色&#xff0c;于是就把vscode改成了自定义的护眼色 效果图&#xff1a; 操作步骤&#xff1a; 快捷键打开设置页面&#xff1a; 按住ctrlshiftp 选择Open setting 按回车键 打开setting页面编…

【STM32CubeMX】一 TIME定时器Mode and Configuration的详解

使用STM32CubeMX软件学习配置定时器&#xff0c;对Mode and Configuration进行分析各部分选项的功能。本次以TIM2为例进行分析。 一、 Slave Mode 可以配置的选项有&#xff1a; Disable External Clock Mode 1 外部时钟源模式1 Reset Mode 复位模式 Gated Mode 门控模式 Tri…

采用T网络反馈电路的运算放大器(运放)反相放大器

运算放大器(运放)反相放大器电路 设计目标 输入电压ViMin输入电压ViMax输出电压VoMin输出电压VoMaxBW fp电源电压Vcc电源电压Vee-2.5mV2.5mV–2.5V2.5V5kHz5V–5V 设计说明1 该设计将输入信号 Vin 反相并应用 1000V/V 或 60dB 的信号增益。具有 T 反馈网络的反相放大器可用…

scanf` 和 `printf` 通常比 `cin` 和 `cout` 在处理数据时的分析

#include<bits/stdc.h> using namespace std; int x[5000005],k; int main() {int n;scanf("%d%d",&n,&k);for(int i0;i<n;i)scanf("%d",&x[i]);sort(x,xn);//快排printf("%d",x[k]); }和#include<vector> #include&…

redis数据库(下)

集合键值对 集合的每一个元素也是字符串格式数据,是无序集合,并且元素不可重复(自动去重) 1.集合的创建和添加命令 sadd命令:无责创建有责添加 sadd 键名 元素1 元素2......... 注意:再次添加元素时,如果触发了集合的唯一性,那么命令执行结果就为0,表示执行失败…

JMeter使用小功能-(持续更新)

1、jmeter在同一个线程组内&#xff0c;uuid的复用 方式一&#xff1a; 方式二&#xff1a; 2、获得jMeter使用的线程总数 ctx.getThreadGroup().getNumberOfThreads()来表示活动线程总数 int threadNumctx.getThreadGroup().getNumThreads(); String threads Integer…

折叠屏遇上Galaxy AI,三星新一代Galaxy Z系列开启移动终端新篇章

作者 | 曾响铃 文 | 响铃说 随着换机周期的普遍延长以及智能手机行业内竞争态势的日益激烈&#xff0c;传统的硬件升级与参数比拼已难以全面满足消费者日益多元化的需求。面对这一挑战&#xff0c;行业迫切需要探索新的增长路径与发展方向。 折叠屏技术的兴起&#xff0c;无…

护航信创落地!YashanDB与航天壹进制完成兼容性互认证

近日&#xff0c;深圳计算科学研究院崖山数据库系统YashanDB与航天壹进制黑方容灾备份与恢复系统顺利完成兼容性互认证。测试结果表明&#xff0c;双方产品完全兼容&#xff0c;稳定运行&#xff0c;为用户提供全方位、安全可靠的数据安全保护方案&#xff0c;护航央国企、金融…

【AMD/Xilinx】FPGA远程烧录调试工具安装及使用

问题描述 在学习工作中&#xff0c;本人遇到了连接FPGA的服务器电脑没有Vivado或Vivado版本较低&#xff0c;导致没办法查看ila的情况。在这种情况下一方面重新安装Vivado需要占用大量存储空间&#xff0c;另一方面使用远程桌面软件连接服务器电脑的画质较为模糊&#xff0c;影…

自学第十九天----深入探究数组下

3. 数组越界 数组的下标是有范围限制的。 数组的下规定是从0开始的&#xff0c;如果数组有n个元素&#xff0c;最后一个元素的下标就是n-1。 所以数组的下标如果小于0&#xff0c;或者大于n-1&#xff0c;就是数组越界访问了&#xff0c;超出了数组合法空间的访问。 C语言本身…

即将被淘汰 这几门编程语言!

又到了周五了&#xff0c;忙碌了一周&#xff0c;可以放松放松一下了&#xff01; 在科技迅速发展的今天&#xff0c;编程语言的更新迭代速度令人惊叹。从经典的C语言到现代的Python&#xff0c;编程语言不断进化&#xff0c;满足着不同领域的需求。然而&#xff0c;有些编程语…

AI语音机器人是否可以设计开放式问题

什么叫开放式提问&#xff1f; 是指提出比较概括、广泛、范围较大的问题&#xff0c;对回答的内容限制不严格&#xff0c;给对方充分自由发挥的余地。 试想一下&#xff0c;就算不是语音机器人&#xff0c;是一个真人销售&#xff0c;和客户沟通时提的问题是开放式的&#xf…

【Linux信号】信号检测处理与捕捉

目录 进程什么时候检测处理信号&#xff1f;以及内核如何实现信号的捕捉&#xff1f; sigaction volatile 信号由操作系统发送给相应的进程&#xff0c;进程保存信号&#xff0c;最后再捕捉处理信号。 进程什么时候检测处理信号&#xff1f;以及内核如何实现信号的捕捉&…