union
{
char buff[4];
float temp;
}Temp;
这种方法可以发送完整的浮点型数据33100000
而用sprintf只是把浮点型的每一位转换成了字符型,串口助手接收到的应该是字符串"331“,你程序应该写错了问题1,3楼上已经解答很清楚了
回答第二个问题:
浮点数定义的存储格式:(来自百科)
单精度浮点数(Single)
用来表示带有小数部分的实数,一般用于科学计算。
占用4个字节(32位)存储空间,包括符号位1位,阶码8位,尾数23位。其数值范围为-34E38~34E38,单精度浮点数最多有7位十进制有效数字,单精度浮点数的指数用“E”或“e”表示。
单精度浮点数有多种表示形式:±nn(小数形式) ±n E ±m(指数形式) ±nn E ±m (指数形式)
如果某个数的有效数字位数超过7位,当把它定义为单精度变量时,超出的部分会自动四舍五入。
应该是传感器得到的是浮点数,通过4个字节读取出来,需要按原格式转换为浮点数形式Option Explicit
Private Declare Sub CopyMemory Lib "KERNEL32" Alias "RtlMoveMemory" (hpvDest As Any, hpvSource As Any, ByVal cbCopy As Long)
Private Sub Command1_Click()
Dim nBytes(0 To 3) As Byte
Dim fSingle As Single
nBytes(0) = 0
nBytes(1) = 120
nBytes(2) = 120
nBytes(3) = 66
CopyMemory fSingle, nBytes(0), 4
DebugPrint fSingle
End Sub
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)