3

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

我一直打算做

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

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

4

1 回答 1

2

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

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

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

于 2010-04-23T23:18:22.900 回答