• 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这种有四舍五入。

  • 相关阅读:
    GIT操作远程仓库
    GIT基本使用方式
    Docker网络及私有仓库配置
    Docker容器资源控制
    Docker基本使用方法
    [linux Tcmd] sh source
    hh
    推演论
    智能小车项目计划
    [CATARC_2017S] Week2
  • 原文地址:https://www.cnblogs.com/sheldon-lou/p/12780542.html
Copyright © 2020-2023  润新知