gpt4 book ai didi

c++ - 解析二进制文件。什么是现代方式?

转载 作者:IT老高 更新时间:2023-10-28 13:59:19 31 4
gpt4 key购买 nike

我有一个我知道的带有一些布局的二进制文件。例如让格式是这样的:

  • 2 字节(无符号短)- 字符串长度
  • 5 个字节(5 个字符)- 字符串 - 一些 id 名称
  • 4 个字节(无符号整数)- 一个步幅
  • 24 字节(6 x float - 2 步,每步 3 个 float )- float 据

文件应该是这样的(为了便于阅读,我添加了空格):

5 hello 3 0.0 0.1 0.2 -0.3 -0.4 -0.5

这里 5 - 是 2 个字节:0x05 0x00。 "hello"- 5 个字节等等。

现在我想阅读这个文件。目前我这样做:

  • 将文件加载到 ifstream
  • 将此流读入char buffer[2]
  • 将其转换为无符号短:unsigned short len{ *((unsigned short*)buffer) }; .现在我有了一个字符串的长度。
  • 将流读取到 vector<char>并创建一个 std::string从这个 vector 。现在我有了字符串 id。
  • 以同样的方式读取接下来的 4 个字节并将它们转换为无符号整数。现在我迈出了一大步。
  • 虽然不是文件末尾读取 float 的方式相同 - 创建一个 char bufferFloat[4]并投下 *((float*)bufferFloat)对于每个 float 。

这可行,但对我来说它看起来很难看。可以直接看unsigned short吗或 floatstring等不带char [x]创造?如果不是,正确转换的方法是什么(我读到我正在使用的那种风格 - 是一种旧风格)?

P.S.:当我写了一个问题时,我脑海中浮现出更清晰的解释 - 如何从 char [x] 中的任意位置转换任意数量的字节?

更新:我忘了明确提到字符串和 float 据长度在编译时是未知的,并且是可变的。

最佳答案

如果不是出于学习目的,并且如果您可以自由选择二进制格式,则最好考虑使用 protobuf 之类的格式。 它将为您处理序列化并允许与其他平台和语言进行互操作。

如果您不能使用第三方 API,您可以查看 QDataStream 以获得灵感

关于c++ - 解析二进制文件。什么是现代方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26845538/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com