gpt4 book ai didi

c++ - 标准 :ostream and cross-platform compatibility

转载 作者:太空宇宙 更新时间:2023-11-04 12:14:15 28 4
gpt4 key购买 nike

我有一个简单的文件保存/加载功能,但由于它是一个插件,由于主机 API,所有内容都以二进制格式写入 std::ostream,并从 std::istream 再次读回。

我用

out.write((char *)&value,sizeof(type));
in.read((char *)&value,sizeof(type));

用于读写,类型为“unsigned int”、“double”等

我在考虑这可能带来的后果,当文件保存在一个平台上并加载到另一个平台上时会发生什么(由于主机限制,这将是 32/64 位 windows、64 位 linux 和 64 位 mac,只有 x86处理器)。如果我不使用可变大小类型,如 size_t(在 32 位和 64 位系统上不同),我可以确定“unsigned int”或“double”将保持相同的长度吗?是否有任何最佳实践来处理这个问题?

最佳答案

if I do not use variable-size type, like size_t (which is different on 32bit and 64bit systems), can I be certain that "unsigned int" or "double" will stay same length?

没有。甚至 unsigned intdouble 的大小也可能因平台而异。


Is there any best-practices to handle this?

是的。序列化数据。

例如,您可以按照以下步骤操作:

  • 首先写下变量的大小,一个字节!
  • 然后获取变量,将其拆分为 N 个字节,其中 N = sizeof(value),然后写入每个字节,一个一个地写入 - 从低位开始有效字节到高有效字节,反之亦然。
  • 在另一台机器上,先读大小,然后一个字节一个字节读,合并得到值。合并意味着执行步骤 2 中提到的过程的逆过程。

如果你写了很多值,那么你可能想改进上面的步骤:首先你不想写每个值的大小,因为它只是一个重复,相反你可以写一个标题类的东西,其中包含所有这些将被重复使用的信息。

关于c++ - 标准 :ostream and cross-platform compatibility,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8410757/

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