【问题标题】:C++ ofstream float encodeC++ ofstream 浮点编码
【发布时间】:2015-06-14 00:12:45
【问题描述】:

有人知道如何将 IEEE 754 单精度(32 位)浮点数写入 ofstream 吗?

我正在使用:

float VERSION = 0.1;
ofstream header;
header.open("a4.pbf",ios::binary);
header.write(reinterpret_cast<const char*>(&VERSION), sizeof(float));
header.close();
  • 结果值:“0xCD,0xCC,0xCC,0x3D”
  • 预期值:“0x3D,0xCC,0xCC,0xCD”

谢谢。

【问题讨论】:

  • 你为什么期待"0x3D,0xCC,0xCC,0xCD"?有很多原因,为什么你不能依赖这个。 endianess 的一切你都知道,不是吗?
  • 我正在将 actionscript3 中的主要代码更改为 C++,并且不想放弃兼容性:help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/…
  • 如何在c++中设置ofstream的字节序?
  • 关于如何设置流的字节序的问题根本没有任何意义。此外,每当您将数据写入文件时,您最好将操作抽象化,以便了解数据的格式(是的,即使转换恰好是某些系统上的标识,这也是有道理的;显然在您的情况不是因为您需要对数据进行编码以使用适当的字节序)。
  • @πάνταῥεῖ 这个问题不需要改进,它说得很好。你是那个要求为这个问题辩护的人。

标签: c++ floating-point 32-bit ieee-754 ofstream


【解决方案1】:

如果您可以将float 转换为uint32_t,则可以使用htonl 来获取大端的“网络”字节顺序。

【讨论】:

  • 这正是我在队列中弹出时的建议。这将保证存储数据中的字节顺序相同,无论平台的本地顺序如何,只要浮点数可以容纳 32 位(如在 OP 的情况下)。请注意,在阅读时,倒数是 ntohl
猜你喜欢
  • 1970-01-01
  • 2012-03-13
  • 1970-01-01
  • 1970-01-01
  • 2015-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多