一.前言
楼主最近遇到一个读写二进制的需求,一开始楼主觉得这个很简单的,Qt估计也会提供的相关的API操作,果不其然,确实是是有的,但是也遇到了一些问题,楼主于是记录分享下
二.QDataStream写入多出4个字节
QDataStream提供的<<以及writeBytes方式会造成这个问题
其中4个字节表示,4个字节后面数据的长度
1.示例代码
// 数据
QList<int> dataList;
for(int num=0;num<5;num++)
{
dataList.append(num);
}
QFile file("11.bin");
if(file.open(QIODevice::WriteOnly))
{
QDataStream binOut(&file);
QByteArray ba;
for(int i=0;i<dataList.count();i++)
{
ba.append(dataList[i]);
}
// 头部会多出4个字节
binOut<<ba;
// binOut.writeBytes(ba.data(),ba.length());
// 头部不会多出4个字节
// binOut.writeRawData(ba.data(),ba.length());
file.close();
}
else
{
qDebug()<<"QDataStream写入失败";
}
三.解决方式
1.还是使用QDataStream,写入方式更改为如下即可
binOut.writeRawData(ba.data(),ba.length());
2.试用QFile的write接口
QFile file2("12.bin");
if(file2.open(QIODevice::WriteOnly))
{
QByteArray ba;
for(int i=0;i<dataList.count();i++)
{
ba.append(dataList[i]);
}
// 两种方式选其一即可
file2.write(ba);
// file2.write(ba,ba.length());
file2.close();
}
else
{
qDebug()<<"file.write失败";
}