在文件中存储浮点数

时间:2013-07-30 13:26:33

标签: c floating-point

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

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

4 个答案:

答案 0 :(得分:5)

可能有两个主要选择:

  1. 以文本格式存储。在这里,您将使用明确定义的小数分隔符标准化特定格式并使用科学记数法,即6.66e42
  2. 使用IEEE754标准以二进制格式存储。使用4或8字节数据类型。正如你所指出的,你必须遵守一个字节顺序。
  3. 文本格式可能更具可移植性,因为有些机器本身并不了解IEEE754。也就是说,这些机器在这些时候很少见。

答案 1 :(得分:4)

C格式的输入/输出函数具有此格式说明符%a。它以十六进制浮点格式格式化浮点数, [ - ] 0x h hhhh d < / i>的。也就是说,如果需要,它有一个“ - ”符号,小数部分的十六进制数字,包括小数点,启动指数的“p”(表示“power”)和2的有符号指数(十进制)。

只要您的C实现使用二进制浮点(或任何浮点使其FLT_RADIX的幂为2),使用%a格式的转换应该是准确的。

答案 2 :(得分:0)

IEEE 754或ISO / IEC / IEEE 60559:2011是大多数语言使用的浮点标准。

对于C,它在C11中被标准正式采用。 (C11附件F IEC 60559浮点运算

答案 3 :(得分:0)

对于少量数据,例如配置值,请使用非二进制文本。如果需要,请选择某种形式的结构化文本,例如JSON,XML。根据您的要求,决定写入多少位数来表示浮点数。

随着所需的可移植性范围(跨语言,操作系统,时间,空间等)的增加,支持文本的论证的力量变得更强。