对于我正在实现的C应用程序,我需要能够读取和写入一组配置值到文件。这些值是浮点数。将来有可能另一个应用程序(可以用C ++,Python,Perl等编写)将使用相同的数据,因此这些配置值需要以编译器和机器独立的良好定义格式存储。
字节顺序转换函数(ntoh/hton
)可用于处理Endianness,但是解决“float”值的不同含义的最佳方法是什么?是否有存储花车的常用方法?只要定义了舍入和截断就不成问题了。
答案 0 :(得分:5)
可能有两个主要选择:
6.66e42
。文本格式可能更具可移植性,因为有些机器本身并不了解IEEE754。也就是说,这些机器在这些时候很少见。
答案 1 :(得分:4)
C格式的输入/输出函数具有此格式说明符%a
。它以十六进制浮点格式格式化浮点数, [ - ] 0x h 。 hhhh p± 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。根据您的要求,决定写入多少位数来表示浮点数。
随着所需的可移植性范围(跨语言,操作系统,时间,空间等)的增加,支持文本的论证的力量变得更强。