栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

DAQ维护 C++ 关于科学计数法与数据格式的一些思考

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

DAQ维护 C++ 关于科学计数法与数据格式的一些思考

最近在从事DAQ数据获取软件的开发与维护,因为与之前所做的工作有很大的出入,在这里纪念一下,软件基于C++开发,个人的C++水平可以从以往的帖子看出不是很高哈哈哈哈哈,但也勉强把一期的软件系统开发出来了,感触最深的是对于继承与封装的理解,但是传输数据还是有些小迷惑,but whatever,走一步学一步,现在主要进行软件的维护还有实现项目的需求。开始正文:

1. 在数据进行传递的时候一定要确定好双方的数据类型是否匹配,否则会出现内存越界的情况,这种问题很麻烦,尤其是在你的软件耦合之后更加棘手,这两天在处理这个问题的时候也是无比痛苦。 2. 关于科学计数法:
  • 关于如何实现输出就不说了,网上都有,但是关键的是在于对实现步骤的理解,%e的作用在于使得你输入的数据成为带有e指数的形式,而这一个选项则要求你输入的数需要是浮点型,而且一定一定要注意你输入数据的数据类型,否则就会出现内存越界的情况,使得你的输出结果呈现很离谱的负数,如下:
Nanoseconds (lsb) = -1.9917e+09

打印程序如下:

#define NANO_CHANGE 100000
fprintf(fp, "  Nanoseconds (lsb) = %.4len", (double)(*(ptr++)*NANO_CHANGE));

当出现这个问题时我很诧异,这一结果是由两个正数相除而得到,但因为我经验比较少,所以没有一开始就意识到这是数据出现内存越界的问题,所以试了很久,当我给两个变量都强制类型转换成double后问题就解决了,代码与输出如下:

fprintf(fp, "  Nanoseconds (lsb) = %.4len", ((double)(*(ptr++))*(double)NANO_CHANGE));
Nanoseconds (lsb) = 2.6650e+08

也有其他的一些问题如指针的访问,当我遇到上面数据类型不匹配造成的痛苦后我没有意识到(尽管软件是我开发的,很惭愧),所以在指针访问的时候绕了大弯,数据类型不匹配实现赋值就要考虑位操作与大小端输出,这里不再详细介绍。

以上、
再多提一句,我找到我真正喜欢的人啦哈哈哈,大家加油、

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/982168.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号