You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

解析CloudCompare二进制文件:QDataStream额外4字节的含义探究

解析CloudCompare二进制文件中QString前4字节的问题

核心结论

你看到的0x0010-0x0013这4字节是QDataStream的版本标识,属于Qt序列化时的前置信息,可以安全跳过,但建议先做版本验证。

详细说明

  • CloudCompare基于Qt开发,用QDataStream写入文件时,会先写入一个quint32类型的流版本号,用来保证不同Qt版本生成的二进制文件能兼容解析,这部分是Qt序列化的隐性规则,容易被忽略。
  • 跳过这4字节后,后续的0x0014-0x0017就是Qt文档里描述的QString长度值,再往后就是UTF-16编码的字符串内容,完全符合标准QString的存储结构。

实操建议

  1. 先读取这4字节的版本号,确认是CloudCompare使用的Qt版本对应的流版本(比如Qt 5.x系列的流版本多为Qt_5_0及以上的数值),避免因版本差异导致后续解析出错。
  2. 跳过版本号后,按标准流程解析QString:
    • 读取4字节的quint32长度值(对应UTF-16字节数)
    • 读取对应长度的字节数组,转成UTF-16字符串

Kotlin简化示例代码:

// 假设input为你的二进制输入流
val streamVersion = input.readInt() // 读取前置的4字节版本号
val strByteLength = input.readInt() // 读取QString的UTF-16字节长度
val strBytes = ByteArray(strByteLength)
input.read(strBytes)
val entityName = String(strBytes, Charsets.UTF_16LE) // Qt默认使用小端UTF-16编码

内容的提问来源于stack exchange,提问作者vatbub

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 17:17:18