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

你可能感兴趣的:(c#硬件对接数值转换)