6

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

字节顺序转换函数 ( ntoh/hton) 可用于处理字节顺序,但是绕过“浮点”值的不同含义的最佳方法是什么?有存储浮点数的常用方法吗?舍入和截断不是问题,只要它被定义。

4

4 回答 4

6

可能有两个主要选择:

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

文本格式可能更便携,因为有些机器本身不理解 IEEE754。也就是说,这种机器在这个时代很少见。

于 2013-07-30T13:31:05.270 回答
4

C 格式的输入/输出函数对此有一个格式说明符,%a. 它以十六进制浮点格式格式化浮点数,[-] 0x hhhhhd。也就是说,如果需要,它有一个“-”符号,小数部分的十六进制数字,包括一个小数点,一个“p”(代表“幂”)开始指数和一个带符号的 2 指数(十进制)。

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

于 2013-07-30T14:12:25.167 回答
0

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

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

于 2013-07-30T13:40:56.237 回答
0

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

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

于 2013-07-30T13:30:14.160 回答