在文件中存储浮点数

waf*_*man 5 c floating-point

对于我正在实现的C应用程序,我需要能够读取和写入一组配置值到文件.这些值是浮点数.将来有可能另一个应用程序(可以用C++,Python,Perl等编写)将使用相同的数据,因此这些配置值需要以编译器和机器独立的良好定义格式存储.

字节顺序转换函数(ntoh/hton)可以用来处理Endianness,但是什么是解决"float"值的不同含义的最佳方法?是否有存储花车的常用方法?舍入和截断不是问题,只要它被定义.

Dav*_*nan 5

可能有两个主要选择:

  1. 以文本格式存储.在这里,您将使用明确定义的小数分隔符标准化特定格式并使用科学记数法,即6.66e42.
  2. 使用IEEE754标准以二进制格式存储.使用4或8字节数据类型.正如您所指出的,您必须遵守字节序惯例.

文本格式可能更具可移植性,因为有些机器本身不了解IEEE754.也就是说,这些机器在这些时候很少见.

  • 十进制不提供可移植性,因为十进制数字和二进制浮点之间的正确转换不如它应该支持的那样好.大多数语言标准不需要正确的舍入转换,并且各种实现不保证它们.相反,即使您必须编写自己的转换例程,十六进制也很容易转换. (2认同)
  • 问题表明,如果定义了舍入或截断,则可以.你能告诉我一个语言标准,它不需要在十进制/浮点转换中进行正确的舍入,但是确定了舍入或截断吗? (2认同)