浮点数转换问题附加例子【已经解决,谢谢各位高手】
比如下位机要发送1.234这个数据,串口传输过来的数据是:3F 9D F3 B6 。请问上位机受到这四个数据后怎么处理才能得到我们想要得浮点数1.234?谢谢大家![ 本帖最后由 l-huang 于 2008-9-28 16:11 编辑 ] 哦,我用labview试了一下,这就是1.234的16进制表示,你可以通过如下共用体实现:
union f_ch
{
float fdata;
char ch;
}
把这四个字节直接赋给ch,然后读出fdata就是1.234了,呵呵,如果共用体不明白的话参考百度或谭浩强allqq-mogudiandian-26all
回复 1# l-huang 的帖子
给你的例子希望对你有帮助:char a1;
int n;
float m;
m=m*8.2/1000;
sprintf(a1, "%.2f",m);
SetCtrlVal (panelHandle,PANEL_DIS,a1);
另外 你可以用CopyString ()和atof()从接受到的数据桢中提取有用的部分然后转换成浮点数再用上面的方法输出显示. 原帖由 sunshuai03 于 2008-7-19 21:32 发表 http://www.cpubbs.com/bbs/images/common/back.gif
哦,我用labview试了一下,这就是1.234的16进制表示,你可以通过如下共用体实现:
union f_ch
{
float fdata;
char ch;
}
把这四个字节直接赋给ch,然后读出fdata就是1.234了,呵呵,如果 ...
这个方法不错~~ 问题已经解决,谢谢各位给予指点 我也遇到同样的问题,只是把这段共用体的程序写进公式节点中,总是提示错误,以至不能继续后面的处理,希望高人指点。
这段共用体的程序是写进公式节点中吗? 我用的是CVI,你说的公式节点是什么意思我不是很清楚 To:楼上。
公式节点是LabVIEW里的,与LabWindows/CVI无关。在LabVIEW公式节点中,你可以插入一段C语言程序代码或MATLAB的m文件,进行一些计算工作。 又学了一个知识点。谢谢。 在 LabVIEW 中将四字节(32 位)数据转换为单精度浮点数(SGL),核心方法是使用“类型转换”(Type Cast)函数,确保输入为 U32 且输出设为 SGL(单精度浮点数),按 IEEE 754 标准解释字节。
- 若输入是 十六进制字符串(如 `"40490FDB"`):先用 “十六进制字符串至数值” 转为 U32,再用 “类型转换”(右键设输出为 SGL)得浮点数。
- 若输入是 字节数组(如从串口收到的 4 字节):可直接 “类型转换”(输入接 U8 数组,输出设为 SGL),但需注意字节序(大端/小端);若结果异常,插入 “交换字节” 函数(编程 → 数值 → 数据操作)。
- LabVIEW 的 “类型转换” 不进行数值缩放,而是按二进制位强制 reinterpret,等效于 C 语言的 `*(float*)&u32_value`。
- 确保四字节内容符合 IEEE 754 单精度格式,否则可能输出 `NaN`、`Inf` 或无意义值。
无需手动解析符号/指数/尾数,LabVIEW 自动按 IEEE 754 处理。若处理通信数据(如 Modbus),常需先拼接字节、判断字节序,再 Type Cast。
页:
[1]