QDataStream使用注意事项

  • 1.不要直接把QByteArray直接 $<<$ 进QDataStream,QT官方文档中没有重载operator<<(QByteArray)方法,经过测试却可以使用,但是他会在最前面自动添加长度信息;如果要写原始QByteArray数据可以使用writeRawData(char*, int)方法,第一个参数为char数组,第二个参数为长度。

  • 2.将QDataStream对象所关联的QByteArray对象清空后,用QDataStream对象去继续写入数据到QByteArray对象中,结果并不如预期那样从位置0开始写入,而是从之前的位置开始写入,前面的数据呈现未定义状态(QBuffer有一样的问题)。可以用局部对象的方法解决,将QDataStream对象设为局部对象,这样每次执行函数完成后该对象会自动销毁,再次执行该函数就是新的QDataStream对象,不会出现上述问题(新的QDataStream对象可以继续关联全局的QByteArray对象)。

  • 3.QDataStream写浮点数据的默认精度是DoublePrecision(64bit),需要设置为SinglePrecision(32bit)

  • 4.0x0A是个特殊的字符,翻译为\n,代表行结束符,在win32上会转换为'\r\n',二进制表示为0x0D 0x0A,会多出一个字节。解决办法为以二进制读写方式打开文件,fopen(path,'wb');在QT中就是不要以QIODevice::Text打开文件。

Tagged
0 0 votes
Article Rating
Subscribe
提醒
0 评论
Inline Feedbacks
View all comments