专栏首页dotnet & javac#硬件对接数值转换

c#硬件对接数值转换

数据处理

通过TCP连接拿到数据之后,在ReadCallback函数里面拿到传过来的结果,是个byte[]。一般我们需要做以下几件事情:

  • 整个数组装成String,然后做日志记录,以便后续的检查
  • 取数组中的某几位,转成对应的int,float,string之类的。
  • 需要给client发送回复数据,所以需要把int,float之类值转成字节数组

大小端

//指示数据存储在此计算机体系结构中的字节顺序(“endianness”)
var isLittleEndian = BitConverter.IsLittleEndian;//true。小端,低位在前面。

关键对象

主要就是BitConverter这个对象的使用,就不用自己去写什么规则了。

实现

字节数组转成

String

var str = Encoding.ASCII.GetString(new byte[] {65, 65, 65});

int,long,float,double

var intBytes = new byte[] {1, 1, 0, 0};
var a = BitConverter.ToInt32(intBytes, 0);
var longBytes = new Byte[] {1, 1, 0, 0, 0, 0, 0, 0};
var b = BitConverter.ToInt64(longBytes, 0);
var floatBytes = new Byte[] {1, 1, 0, 0};
var c = BitConverter.ToSingle(floatBytes, 0);
var doubleBytes = new Byte[] {1, 1, 0, 0, 0, 0, 0, 0};
var d = BitConverter.ToDouble(doubleBytes, 0);

不足的位数需要补足

转成字节数组

从String

var s = "lou";
var strBytes = Encoding.ASCII.GetBytes(s);//指定编码方式。
//拿到[108,111,117] 也就是每个字母的acsii值。

从int,long,float,double转

int a = int.MaxValue;
var intBytes = BitConverter.GetBytes(a);
//4个字节 [255,255,255,127]
long b = long.MaxValue;
var longBytes = BitConverter.GetBytes(b);
//8个字节 [255,255,255,255,255,255,255,127]
float c = float.MaxValue;
var floatBytes = BitConverter.GetBytes(c);
//4个字节 [255,255,127,127]
double d = Double.MaxValue;
var doubleBytes = BitConverter.GetBytes(d);
//8个字节 [255,255,255,255,255,255,239,127]

每种类型对应的byte数

进制转换表示

Convert.ToByte(val)

把2,8,10,16进制的字符串转成Byte,也就是看他具体表示多少。

var b1 = Convert.ToByte("11",2);//把用2进制表示的11转成字节

Convert.ToString(value,toBase)

把一个byte用2,8,10,16进制表示

var a = Convert.ToString(8,2);//1000 

这个可以转byte,不过实际只是一个类型转换。类似强转。float这种有四舍五入。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • [SpingBoot guides系列翻译]通过JDBC和Spring访问关系数据库

    build的时候用到了spring-boot-maven-plugin插件。他提供了很多便捷的特性。

    _淡定_
  • 用Portable.BouncyCastle来进行加解密的代码demo

    这里对之前对接的公司中的代码demo做一个总结,原本为清一色的java,哈哈。这里都转成C#。用到的库是Portable.BouncyCastle。官网。之前也...

    _淡定_
  • 年前辞职-WCF入门学习(5)

    本来想第六集一起介绍的,后来发现第六集内容比较多,有半个多小时,就不一起了。网站规定6小时内只能发布一篇文章到首页,,那我就11点再发布吧。

    _淡定_
  • Android Handler机制3之SystemClock类

    官网位置在https://developer.android.com/reference/android/os/SystemClock.html

    隔壁老李头
  • 如何在JavaScript中处理大量数据

    在几年之前,开发人员不会去考虑在服务端之外处理大量的数据。现在这种观念已经改变了,很多Ajax程序需要在客户端和服务器端传输大量的数据。此外,更新DOM节点的处...

    CSDN技术头条
  • VB.NET jsscript和vbscript脚本之间数据传递操作

    jsscript和vbscript脚本的数据传递的方法是一样的;只是脚本里面的对象稍有不同,需要深入学习请自行百度!

    巴西_prince
  • df和du显示的磁盘空间使用情况不一致的原因及处理

    在Linux下查看磁盘空间使用情况,最常使用的就是du和df了。然而两者还是有很大区别的,有时候其输出结果甚至非常悬殊。 1. 如何记忆这两个命令 du-Dis...

    猿人谷
  • 不是语言之争--Go vs Erlang

    因为 云巴 系统对高并发、低延迟的需求,我们对各个语言、平台做了很多的调研比较工作。这自然就包括致力于开发高并发应用的 Go 和 Erlang。 并发 Go 对...

    李海彬
  • 分享一个开源的JavaScript统计图表库,40行代码实现专业统计图表

    这可能是史上最简单易用的开源统计图表绘制库了。柱状图,饼状图,点状图等等您能想到的类型全部支持。

    Jerry Wang
  • PC、移动两手抓,HTC计划在2017年底推出移动VR头显

    VRPinea

扫码关注云+社区

领取腾讯云代金券