news 2026/4/16 8:59:03

qt-QDataStream-写入bin文件有多余字符

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
qt-QDataStream-写入bin文件有多余字符

场景介绍

结果

原因分析

在Qt中使用QDataStream写入QByteArray时,QDataStream会默认添加数据长度前缀(4字节的quint32类型),这是其设计行为。具体分析如下:

  1. 文件内容解析
    00 00 00 04:这是QDataStream自动添加的数据长度标识(4字节小端序),表示后续数据长度为4字节(即"aaaa"的长度)。
    61 61 61 61:是字符串"aaaa"的十六进制表示(ASCII码中’a’的十六进制为0x61)。
  2. 根本原因
    QDataStream是一个二进制序列化流,默认会为动态数据(如QByteArray、QString)添加长度前缀,以确保数据读取时能正确解析边界。这种设计适用于需要跨平台/跨版本兼容性的场景,但会引入额外字节。
  3. 解决方案
    如果需要直接写入原始字节(无长度前缀),避免使用QDataStream,改用QFile的write()方法:
QString dir_str=QApplication::applicationDirPath()+"/ExcelOut/Bin";QString fileBasicName=dir_str+"/test";
QFile file(fileBasicName); if(file.open(QIODevice::WriteOnly | QIODevice::Append)) { QByteArray byte = "aaaa"; file.write(byte); // 直接写入原始字节 file.close(); }
  1. 若必须使用QDataStream
    可通过调整流格式减少额外字节,但无法完全消除长度前缀(除非手动控制):
QDataStream stream(&file); stream.setVersion(QDataStream::Qt_5_15); // 明确版本 stream.setFloatingPointPrecision(QDataStream::SinglePrecision); stream.setByteOrder(QDataStream::LittleEndian); // 写入时仍会包含长度前缀 stream << byte;
  1. 关键区别
  • QFile::write():直接写入原始字节,无任何附加信息。
  • QDataStream::operator<<:为数据添加类型/长度元信息,适用于结构化数据存储。

验证建议
使用十六进制编辑器查看文件时,确认是否仅存在00 00 00 04 + 61 61 61 61,无其他隐藏字符。若需严格二进制兼容,优先使用QFile::write()。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/14 16:40:11

探索闭环 Cuk 转换器:从理论到仿真实践

闭环cuk转换器 [1]此仿真对于了解闭环 Cuk 转换器非常有用。 [2]您可以使用方程式轻松找到L&C的值。 方程式显示在 Simulink 文件中。最近在研究电源管理相关的内容&#xff0c;接触到了闭环 Cuk 转换器&#xff0c;发现它相当有趣&#xff0c;今天就来和大家分享一下我的学…

作者头像 李华
网站建设 2026/4/13 23:53:21

电子支付设备制造商,以Facebook+TikTok整合营销精准触达海外系统集成商和分销商

1、客户公司介绍本次合作客户是一家位于深圳的电子支付设备制造商&#xff0c;专注于智能卡读写器、移动POS终端等安全支付技术的研发与生产。作为一家拥有完善认证体系与强大研发团队的ODM/OEM企业&#xff0c;该公司致力于为全球合作伙伴提供定制化、经济高效的硬件解决方案与…

作者头像 李华
网站建设 2026/4/12 18:17:34

postman和Jmeter做接口测试的区别(经验之谈)

接口测试的目的 API 测试作为集成测试的一部分&#xff0c;经过被测应用的接口&#xff08;API&#xff09;来确定是否在功能、可靠性、性能和安全方面达到预期的软件测试。因为 API 都没有 GUI 界面&#xff0c;API 测试都是在通信层进行的。 1.建立接口用例集 Postman功能…

作者头像 李华
网站建设 2026/4/15 5:50:30

三菱PLC与组态王打造饮料自动装箱机控制系统

No.986 三菱PLC和组态王组态饮料自动装箱机控制系统设计在工业自动化领域&#xff0c;饮料自动装箱机的高效运行对于提高生产效率至关重要。今天咱们就来聊聊如何用三菱PLC和组态王来设计这样一个控制系统。 三菱PLC&#xff1a;核心控制大脑 三菱PLC作为控制核心&#xff0c;负…

作者头像 李华
网站建设 2026/4/14 23:05:12

APP UI自动化测试思路总结

首先想要说明一下&#xff0c;APP自动化测试可能很多公司不用&#xff0c;但也是大部分自动化测试工程师、高级测试工程师岗位招聘信息上要求的&#xff0c;所以为了更好的待遇&#xff0c;我们还是需要花时间去掌握的&#xff0c;毕竟谁也不会跟钱过不去。接下来&#xff0c;一…

作者头像 李华