【发布时间】:2016-10-15 21:48:37
【问题描述】:
我最近了解了固定大小的整数,并计划在我多年前编写的旧程序中使用它们。
float 和/或 double 是否有固定大小的 int 等效项?
我的计划是在程序的最大部分使用“本机类型”int,float,double,并且仅在考虑可移植性时(例如使用二进制文件读/写)指定固定大小的类型。
我使用二进制文件存储数据,例如:日期 yyyymmdd(所以 uint32)、标志 [0,4](所以 uint8)、字符串(以空结尾的字符串)和货币(现在是 @ 987654325@)。
关于可移植性,程序“可移植”是指它可以被编译(或交叉编译)并在不同平台上运行。到目前为止:linux、windows、android(本机,通过没有 GUI 的终端模拟器)和 OpenBSD(strcat/strcpy 只需要在 2 行中替换为 strlcat/strlcpy)。 如果我在 linux x86_64、android arm-something、windows 32 something 等之间使用相同的二进制数据文件,我担心存储的 float/double 会发生什么...我想拥有一种强制二进制文件中浮点值的唯一大小和表示的方法。
【问题讨论】:
-
如果定义了
__STDC_IEC_559__,则为是,否则为否。需要有关 FP 可移植性要求的更多详细信息。松散地:推荐将货币存储为字符串。 -
IEEE 浮点标准今天无处不在,除了一些非常便宜的嵌入式处理器。由于您正在阅读文件,因此可以忽略它们。您不能完全忽略的是字节顺序(又名 endiness),这也是您的固定大小整数的问题。
-
@chux:帖子已编辑以明确可移植性。
-
@Hans Passant:我从没想过endiness。我现在正在考虑将数据存储在纯文本文件中...
-
对相关问题有帮助吗?
标签: c floating-point portability