因此,我正在序列化一个跨平台使用的C数据结构,并且我希望确保以跨平台的方式记录我的浮点数。
我一直打算做的就是
char * pos;
/*...*/
*((double*) pos) = dataStructureInstance->fieldWithOfTypeDouble;
pos += sizeof(double);但我不确定这些字节是否会以IEEE754交换格式记录在char *数组中。我以前也遇到过跨平台问题(endian-ness和诸如此类的问题)。需要对double做什么才能得到交换格式的字节吗?
发布于 2010-04-24 07:18:23
C实现根本不需要使用IEEE754表示,所以任何基于直接访问double的二进制表示的解决方案都不是真正的可移植性。
如果您只想使用表示IEEE754格式的双精度的系统,而endianness是唯一需要考虑的问题(并且您假设大端字节序列和小端字节序列是唯一的选择!)...然后,您也许可以在运行时使用具有已知二进制表示的某个值来探测字节顺序(就像您可以通过查看0x12345678是以0x12还是0x78作为第一个字节存储来测试整数一样)。
(如果你真的关心可移植性,我不确定还有比使用sprintf()和strtod()更好的选择,并假设你可能没有必要比相关规范要求的绝对最低精度更高,例如C99规范的5.2.4.2.2节。)
https://stackoverflow.com/questions/2701529
复制相似问题