Qt写二进制文件头部多出四个字节问题解决

本文探讨在Linux系统下使用QT的QDataStream类写入二进制文件时,遇到的自动添加四字节长度头的问题。通过代码示例详细分析了原因,并提供了一种解决方案,即直接使用QFile类来避免这一问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述

在linux系统下用qt写二进制文件时,使用QDataStream类进行存储文件。结果查看到每次写入都会在头部多出四个字节的长度。如下图所示:
在这里插入图片描述

问题分析

写入二进制文件代码如下:

QFile file(m_File);
if (!file.open(QIODevice::WriteOnly|QIODevice::Append))
{
	qDebug() << "File cannot open!";
	return;
}
QDataStream out(&file);
out << ba << appendtimeflag();  //函数返回一个7字节长度的时间戳字符串(年月日时分秒)
file.flush();
file.close();

使用linux下的xxd命令查看生成的二进制文件内容。

xxd -g 1 xxx.dat  //二进制文件名

显示结果如上图,55 BB前多了 00 00 00 1e,时间戳前多了00 00 00 07,多出四字节的int值正好是后面紧跟二进制数据的长度。应该是QDataStream自动添加的头,找了一下QDataStream类,发现产生的原因是QDataStream的构造函数实际上是QDataStream(QByteArray*, int);但没有发现如何不输出这个长度头。

修正

舍弃QDataStream类写文件,使用QFile类的写法。。如下:

QFile file(m_File);
if (!file.open(QIODevice::WriteOnly|QIODevice::Append))
{
	qDebug() << "file cannot open!";
	return;
}
ba += appendtime();
file.write(ba);
file.flush();
file.close();

读取生成文件的结果如下图,没有问题了。
在这里插入图片描述

写在最后

经过这次,以后恐怕是不敢再用QDataStream类写文件了。自动加头并在输出中体现,这个鸡肋又多余的功能不知道是那位大神编写的。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值