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

标签 c serialization double ieee-754

所以我正在序列化一个 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/

相关文章:

c - 第一次 clEnqueueMapBuffer 调用需要很多时间

java - 获取 Jersey 反序列化为子类

.net - .NET 4 是否有内置的 JSON 序列化器/反序列化器?

c++ - Msgpack 中是否有版本控制功能

c++ - 从 double* 转换为 int 会失去精度

c++ - 将字符串转换为 double - 精度丢失

java - 在不应该使用整数和 double 时会给出不同的答案

c - 是否有可能 "grab"/"scrape"C printf() 在 R 中(或使用 Rprintf())的 .Call() 输出?

c - 双向链表删除函数错误

c - 从命名管道读取