博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【转】QT中QDataStream中浮点数输出问题
阅读量:5898 次
发布时间:2019-06-19

本文共 1116 字,大约阅读时间需要 3 分钟。

先上代码:

C/C++ code
 
1
2
3
4
5
6
7
8
9
10
11
12
13
int 
main(
int 
argc, 
char 
*argv[])
{
    
QApplication a(argc, argv);
    
QFile file1(
"test.dat"
);
    
if
(!file1.open(QIODevice::WriteOnly))
        
std::cout<<
"can not open file"
<<std::endl;
    
QDataStream fout(&file1);
    
float 
f=80.4;
    
fout<<f;
    
std::cout<<
"done!"
<<std::endl;
    
file1.close();
    
return 
a.exec();
}

原意应该输出float类型的二进制文件,其长度应该为32bit即四字节,但输出结果如下图:
长度为8字节,后面四字节是多出来的
我将程序改成使用QByteArray 时,则可以正常输出,

C/C++ code
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int 
main(
int 
argc, 
char 
*argv[])
{
    
QApplication a(argc, argv);
    
QFile file1(
"test.dat"
);
    
if
(!file1.open(QIODevice::WriteOnly))
        
std::cout<<
"can not open file"
<<std::endl;
    
QDataStream fout(&file1);
    
QByteArray byteArray;
    
QBuffer buffer1(&byteArray);
    
buffer1.open(QIODevice::WriteOnly);
    
QDataStream out(&buffer1);
    
float 
f=80.4;
    
out<<f;
    
fout.writeRawData(byteArray,
sizeof
(
float
));
    
std::cout<<
"done!"
<<std::endl;
    
file1.close();
    
return 
a.exec();
}

此时输出结果正常
求高手解释原理!

算是自问自答吧,今天仔细看了一下帮助文档,原来在高版本中QDataStream中默认精度为double,所以需要在程序中将QDataStream中浮点数精度改为single,办法为QDataStream::setFloatingPointPrecision(QDataStream::singlePrecision)

转载地址:http://jfasx.baihongyu.com/

你可能感兴趣的文章
关于 error: LINK1123: failure during conversion to COFF: file invalid or corrupt 错误的解决方案...
查看>>
Linux 进程中 Stop, Park, Freeze【转】
查看>>
PHP盛宴——经常使用函数集锦
查看>>
安装gulp及相关插件
查看>>
如何在Linux用chmod来修改所有子目录中的文件属性?
查看>>
Hyper-V 2016 系列教程30 机房温度远程监控方案
查看>>
笔记:认识.NET平台
查看>>
cocos2d中CCAnimation的使用(cocos2d 1.0以上版本)
查看>>
gitlab 完整部署实例
查看>>
影响企业信息化成败的几点因素
查看>>
SCCM 2016 配置管理系列(Part8)
查看>>
struts中的xwork源码下载地址
查看>>
我的友情链接
查看>>
PHP 程序员的技术成长规划
查看>>
python基础教程_学习笔记19:标准库:一些最爱——集合、堆和双端队列
查看>>
js replace,正则截取字符串内容
查看>>
javascript继承方式详解
查看>>
lnmp环境搭建
查看>>
自定义session扫描器精确控制session销毁时间--学习笔记
查看>>
仿射变换
查看>>