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

6 篇文章 1 订阅

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

1. 在数据进行传递的时候一定要确定好双方的数据类型是否匹配,否则会出现内存越界的情况,这种问题很麻烦,尤其是在你的软件耦合之后更加棘手,这两天在处理这个问题的时候也是无比痛苦。

2. 关于科学计数法:

  • 关于如何实现输出就不说了,网上都有,但是关键的是在于对实现步骤的理解,%e的作用在于使得你输入的数据成为带有e指数的形式,而这一个选项则要求你输入的数需要是浮点型,而且一定一定要注意你输入数据的数据类型,否则就会出现内存越界的情况,使得你的输出结果呈现很离谱的负数,如下:
Nanoseconds (lsb) = -1.9917e+09

打印程序如下:

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

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

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值