十六进制数组转换为浮点计算方法两种算法
来源:互联网 发布:java mysql 时区设置 编辑:程序博客网 时间:2024/06/05 14:48
最近在开发一个串口通讯的项目中,需要将从串口中读出的16进制数据直接转换为浮点数,如16进制字符串“0064128”,如果使用VB来写数据转换是样的
'定义二进制结构Private Type HexData4 byte1 As Byte byte2 As Byte byte3 As Byte byte4 As ByteEnd Type'定义一单精度结构Private Type RealData dataR As SingleEnd Type'将二进制格式分别对应写入结构中HexData4,然后赋值计算Public Function GetReal(B1 As Byte, B2 As Byte, B3 As Byte, B4 As Byte) As Single On Error GoTo GetReal_Error Dim HD As HexData4 ' create user defined types for LSet to work on Dim RD As RealData ' create user defined types for LSet to work on HD.byte2 = B1 HD.byte1 = B2 HD.byte4 = B3 HD.byte3 = B4 LSet RD = HD GetReal = RD.dataR Debug.Print Format(GetReal, "0.00") Exit Function ' avoid the error handlerGetReal_Error: Debug.Print "Invalid Real=" & HD.byte1 & " " & HD.byte2 & " " & HD.byte3 & " " & HD.byte4 GetReal = 0 Resume NextEnd Function其结果值为4.000
但在使用c#时,就出现了问题,采用BITCONVERTER,将基础数据类型与字节数组相互转换。这个函数有一个调整顺序的参数(Little-endian,Big-endian) ,一个正序,或序。
string hexString = "0064128";uint num = uint.Parse(hexString, System.Globalization.NumberStyles.AllowHexSpecifier);byte[] floatVals = BitConverter.GetBytes(num);float f = BitConverter.ToSingle(floatVals, 0);Console.WriteLine("float convert = {0}", f);
按上面的结果计算的数据是不正确的,因为仪表定义的数据格式不是这种的,为此修改一个数据在数组中的布局
byte[] floatVals = new byte[4]; floatVals[1] = inbyte[1]; floatVals[0] = inbyte[2]; floatVals[3] = inbyte[3]; floatVals[2] = inbyte[4]; float fsum = BitConverter.ToSingle(floatVals, 0); Console.WriteLine("sum float convert = {0}", fsum.ToString());
0 0
- 十六进制数组转换为浮点计算方法两种算法
- 十六进制转换为浮点数
- java实现十六进制转换为浮点数
- C# 十六进制 string 转换为浮点型
- vc 浮点数转换为内存十六进制字符串
- vc 浮点数转换为内存十六进制字符串
- vc 浮点数转换为内存十六进制字符串
- 数组(九)--十进制转换为十六进制
- 算法:十进制转换为十六进制,二进制,八进制
- 十进制整形数据转换为两字节十六进制数据,
- Python 之 将字符串数组转换为浮点型数组
- 如何将字节数组转换为十六进制的字符串
- 十六进制计算方法
- 将按十六进制存储的32位浮点数转换为十进制的小数
- 使用Python 3.5.2处理十六进制字符串转换为浮点数
- 数值转换为十六进制
- 转换为十六进制函数
- 字符串转换为十六进制
- Linux 常用函数——memcpy函数
- 16--2--2指针变量交换
- SqlServer2005 合并两个字符串的方法
- DXSDK_Jun10安装错误解决!/directX安装错误
- 我心中的计算机学科(二)
- 十六进制数组转换为浮点计算方法两种算法
- Nutch读取网页字段
- SQL语句容易出现错误的地方-连载
- ubuntu suse下让vim支持+y剪切板
- Oracle Query Result Cache
- Android学习---解决Android Graphical Layout 界面效果不显示
- USB转串口 FT232/PL2303/CH340 驱动以及使用体会
- Hibernate中polymorphism=”explicit”和polymorphism=”implicit”区别
- compare gsm cdma