我正在编写一个二进制文件读取器/写入器,并决定为了处理字节序问题,我将在写入时将所有数据转换为“网络”(大)字节序,并在读取时转换为主机字节序。我正在避免hton*
,因为我不想仅仅为了这些功能而与 winsock 链接。
我的主要困惑来自如何处理浮点值。对于所有整数值,我在<cstdint>
(uint32_t
等) 中都有大小类型,但根据我的研究,浮点类型不存在这样的等价物。我想在写入时将所有浮点值转换为 32 位表示并转换回主机上使用的任何精度(32 位对于我的应用程序来说已经足够了)。这样我就可以准确地知道要为浮点值写入和读取多少字节;相反,如果我在加载文件的机器上使用sizeof(float)
并且与编写文件的机器不同。sizeof(float)
我刚刚意识到可以使用frexp
以整数形式获取尾数和指数,将这些整数写出(具有一些固定大小),然后读入整数并使用ldexp
. 这看起来很有希望,但我想知道是否有任何普遍接受或推荐的方法来处理没有htonf
/ntohf
的浮点字节序。
我几乎可以肯定地知道,我很快将瞄准的任何平台都将float
用 32 位表示,但我想让我现在编写的代码尽可能兼容,以便在未来的项目中使用。