gpt4 book ai didi

c - 以 IEEE 754 交换格式记录/读取 C double

转载 作者:行者123 更新时间:2023-12-01 13:32:44 24 4
gpt4 key购买 nike

所以我正在序列化一个 C 数据结构以供跨平台使用,并且我想确保以跨平台的方式记录我的 float 。

我一直在计划着做

 char * pos;
/*...*/
*((double*) pos) = dataStructureInstance->fieldWithOfTypeDouble;
pos += sizeof(double);

但我不确定这些字节是否会以 IEEE 754 交换格式记录在 char * 数组中。我之前一直被跨平台问题困扰(字节序等等)。我需要对 double 做些什么来获取交换格式的字节吗?

最佳答案

C 实现根本不需要使用 IEEE 754 表示,因此任何基于直接访问 double 二进制表示的解决方案无论如何都不会真正具有可移植性。

如果您假设您只会使用以 IEEE 754 格式表示 double 的系统,并且字节顺序是唯一担心的(并且您假设大端序列字节与小字节序字节序列是唯一的选择!)...那么你也许可以在运行时使用一些具有已知二进制表示的值来探测字节顺序(就像你可以通过查看来测试整数一样查看 0x12345678 是否以 0x12 或 0x78 作为第一个字节存储)。

(如果您真的关心可移植性,我不确定是否有比使用 sprintf()strtod()< 更好的选择,并假设您不一定比相关规范(例如 C99 规范的第 5.2.4.2.2 节)要求的绝对最小值更准确。)

关于c - 以 IEEE 754 交换格式记录/读取 C double ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2701529/

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