一、前言

大家好!我是付工。

我们在进行上位机开发时,从设备端获取到的数据之后,需要进行一定的数据处理及转换,才能生成我们需要用的数据。

这其中就涉及到了各种数据类型之间的相关转换,很多非科班出身的电气工程师,经常会因为弄不清楚各种数据类型之间的转换关系,导致无法获取到自己想要的数据。

因此,我开源了一个数据转换库的项目,放在Gitee上,希望对大家有所帮助。

二、网络架构

整个数据转换库总共包含15个类,包含了各种常用各种数据类型之间的互相转换,每个转换类中的方法都增加了注释,使用起来会很方便。

/// <summary>
/// 根据起始地址和长度自定义截取字节数组
/// </summary>
/// <param name="data">字节数组</param>
/// <param name="start">开始字节</param>
/// <param name="length">截取长度</param>
/// <returns>字节数组</returns>
[Description("根据起始地址和长度自定义截取字节数组")]
public static byte[] GetByteArrayFromByteArray(byte[] data, int start, int length)
{
if (start < 0) throw new ArgumentException("开始索引不能为负数");
if (length <= 0) throw new ArgumentException("长度必须为正数");
if (data.Length < (start + length))
throw new ArgumentException("字节数组长度不够或开始索引太大");
byte[] result = new byte[length];
Array.Copy(data, start, result, 0, length);
return result;
}

三、项目应用

在项目上进行应用,可以通过以下两种方式:

1、Nuget安装

通过Nuget包管理器中年搜索xbd.DataConvertLib,点击安装即可,如下所示:

2、Gitee下载

Gitee下载链接:

https://gitee.com/fujiajin/xbd.DataConvertTool

下载之后即包含完整源码,可以集成到项目中或将dll文件和xml文件添加到项目中。

四、使用方法

虽然转换库包含了不同的类,每个类中又包含了很多方法,但是不用担心,只要掌握了以下几个原则,使用起来会很简单。

原则一:首先要确定使用哪个类,类的命名是根据返回值来决定的,这个返回值就是你希望得到的类型。

  • 如果返回布尔值或布尔数组,使用BitLib。
  • 如果返回字节数组,使用ByteArrayLib。
  • 如果返回短整型或短整型数组,使用ShortLib。
  • 以此类推。

原则二:确定好类之后,接下来就是确定方法。

  • 绝大多数方法的命名是按照 Get...From... 来定义的
  • 要明确知道需要什么类型,有什么类型的数据

示例:我们希望从一个字节数组中,某个索引开始截取转换成一个浮点数。

我们希望得到一个浮点数,因此类名选择FloatLib。

我们有的是一个字节数组,因此方法名选择GetFloatFromByteArray。

在实际应用中,Visual Studio会有智能提示,我们只需要选择即可。

五、软件工具

大家下载的源码中,运行的界面是基于这个转换库开发的一个测试工具,主要是使用反射和特性来实现的。

这上面罗列了通信库的所有的类和每个类对应的方法,每个类和方法都有对应的注释,然后通过表格输入正确的数据,点击执行结果,即可得到对应的结果。

比如:我们想要将2.5浮点数转成一个字节数组,那么选择ByteArrayLib的GetByteArrayFromFloat方法,第一个参数填写2.5,第二个参数填写大小端,即可得到结果为[64,32,0,0]。

开源不易,希望大家多多支持。

【开源】C#上位机必备高效数据转换助手的更多相关文章

  1. 【安富莱原创开源应用第1期】花式玩转网络摄像头之TCP上位机软件实现,高端大气上档次,速度2MB/S,华丽丽的界面效果

    说明:1.例子是两年前做的,一直没有顾上整理出来,今天特地整理出来,开源出来给大家玩.2.上位机是emWin模拟器开发的,大家估计很难猜到,所以你会emWin话的,就可以轻松制作上位机.做些通信和控制 ...

  2. 上位机面试必备——TCP通信灵魂二十问【下】

    上篇文章跟大家介绍了TCP通信常见的前10个面试题,没看过的小伙伴可以点击下方链接进行查看: 上位机面试必备——TCP通信灵魂二十问[上] 今天就后面的10个面试题接着做下说明:欢迎关注[dotNet ...

  3. 开源串口 Ymodem 上位机软件

    概述 上位机使用Qt开发,计划整合多个工具为一体,用作以后的调试工具. 当前完成功能: 1.串口调试 支持hex和ascii 码发送,接受. 支持自动添加回车换行. 支持定时发送,最短间隔100ms, ...

  4. 上位机面试必备——TCP通信灵魂二十问【上】

    关注公众号获取更多干货 TCP通信协议应该是上位机开发中应用最广泛的协议,无论是西门子S7协议.三菱MC协议或者是欧姆龙的Fins-TCP协议等,都是TCP通信协议的典型应用.很多人在上位机面试时,都 ...

  5. C++ MFC实现基于RFID读写器的上位机软件

    C++ MFC实现基于RFID读写器的上位机软件 该博客涉及的完整工程托管在https://github.com/Wsine/UpperMonitor,觉得好请给个Star (/▽\=) 运行和测试环 ...

  6. 快速设计一个简单的WPF串口上位机

    最近一直在学习UWP,其中有的技术参考了WPF,所以又回头再来学习WPF,感觉学的东西很杂,必须记录一下,不然时间长了还得忘掉,于是申请开始写博客,将学习的心得记录一下,以备后用.这次是因为公司内训, ...

  7. C#上位机串口控制12864显示

    实现的效果 上面是用Proteus仿真的,,对了如果自己想用proteus仿真需要安装下面这个软件 再看一下实物显示效果 先做上位机部分........... 为了程序一启动就把电脑上能用的串口号显示 ...

  8. 医疗器械c#上位机开发指引教程

    此教程面向的读者:对医疗器械上位机编程有兴趣,或者急需了解医疗器械(尿常规.血液分析.生化.心电.B超等医疗下位仪器)的编程流程.编程细节的程序员. 1.得到仪器协议 当我们需要与医疗器械等下位机数据 ...

  9. 物联网框架ServerSuperIO.Core(.netcore)跨平台,一套设备驱动通吃嵌入式、上位机、云服务

    1.      概述... 2 2.      ServerSuperIO.Core跨平台开发环境... 2 3.      ServerSuperIO.Core特点... 2 4.      Ser ...

  10. 基于uFUN开发板的心率计(三)Qt上位机的实现

    前言 上两周利用周末的时间,分别写了基于uFUN开发板的心率计(一)DMA方式获取传感器数据和基于uFUN开发板的心率计(二)动态阈值算法获取心率值,介绍了AD采集传感器数据和数据的滤波处理获取心率值 ...

随机推荐

  1. 在嵌入式设备中实现webrtc的第三种方式②

    先贴上效果图以及操作路径. 操作路径为:启动信令服务器,配置浏览器关闭mDNS,双端登录,浏览器端邀请.最终连接成功建立,我们通过datachannel成功通信 (关闭mDNS是因为谷歌浏览器隐藏了局 ...

  2. 如何查找Windows 11中的共享文件夹

    windows11的控制面板: Windows工具: 计算机管理: 共享文件夹:

  3. 使用Boost.asio与Boost.beast基于协程连接ws

    目录 目录 前言 准备工作 实现 初始化io_context并监听信号 启动连接ws的线程并启动io_context 建立tcp链接(以下步骤皆位于ws函数中) ws握手 传输数据 效果 总结 前言 ...

  4. 2024-11-16:哈沙德数。用go语言,如果一个整数能够被它的各个数位上数字的和整除, 我们称这个整数为哈沙德数(Harshad number)。 给定一个整数 x, 如果 x 是哈沙德数,则返回

    2024-11-16:哈沙德数.用go语言,如果一个整数能够被它的各个数位上数字的和整除, 我们称这个整数为哈沙德数(Harshad number). 给定一个整数 x, 如果 x 是哈沙德数,则返回 ...

  5. k8s-部署应用

    Deployment # app-deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: app-web spec: ...

  6. (Python基础教程之十七)Python OrderedDict –有序字典

    一个OrderedDict 维护插入顺序添加到字典中的项目.项目的顺序在迭代或序列化时也会保留. 1. Python OrderedDict示例 OrderedDict 是python collect ...

  7. 从PipedInputStream/PipedOutputStream谈起

    本篇主要从分析PipeInputStrem和PipedOutputStream谈起.谈及软件设计的变化,以及如何将软件拆分.组合,适配-- 1 源代码分析 下面将详细分析PipedInputStrea ...

  8. vue中使用百度地图

    vue-cli创建的项目中使用百度地图,样式如下: 根据后台返回的不同的信息,展示不同的标记以及对应的标记信息,点击鼠标后展示弹窗 首先,引入vue-baidu-map,以展示地图,对应的命令是 np ...

  9. k8s之常见问题汇总

    1.服务器中的k8s已经被移除,但是磁盘依然有占用, 于是将其卸载并删除操作 [root@k8s-node2 k8s_node]# rm -rf /var/lib/kubelet rm: cannot ...

  10. getent使用小结

    转载请注明出处: getent 是一个用于访问系统数据库的命令,通常用于获取与网络有关的信息,比如用户.组.主机名.服务等.这个命令是 Linux 和 Unix 系统中非常有用的工具,可以用来查询多种 ...