【发布时间】:2021-05-03 15:33:47
【问题描述】:
假设我有一个传感器返回测量数据(例如每秒 6 x 50 个值)。每个值都是单精度浮点数范围内的小数。我需要将这些数据写入一个文件,然后由另一个应用程序读取该文件以进行其他操作。格式化/编码文件的最有效方法是什么?
起初我认为 CSV 是为了简单起见,但使用科学记数法会导致每个小数的长度为 9 个字节或更多(例如 -4,97E-03)。在大量传感器上长时间保留数据的情况下,这可能是存储限制的问题,也因为这些数据具有高熵,因此压缩没有多大帮助。
所以我考虑将小数保存为浮点数(4 个字节)会节省大量数据,但我不知道哪些格式提供了定义明确的结构来存储浮点数表。是否有类似逗号分隔值的东西,其中值采用 IEEE754 格式,或类似的东西?我问这个是因为我想避免定义自定义格式。
【问题讨论】:
-
float的大多数C实现使用的格式实际上是IEEE-754定义的二进制交换格式,这意味着您可以直接将float的字节写入某些通信或存储介质并读取从中恢复值的字节,前提是字节按匹配顺序读取和写入(读取器和写入器都是大端或小端,或者他们根据需要安排重新排列字节)。如果您想使用人类可读或文本友好的格式,请考虑使用%a来表示十六进制浮点数。 -
如果你用二进制存储,一个四字节元素的数组就足够了;不需要逗号之类的分隔符。无论使用何种整体格式,例如在开始时给出数组维度,都由您决定。
-
更多地描述您的数据:范围、单位、精度。原始数据是整数吗?
-
@EricPostpischil 我编辑了问题,澄清我想避免定义自定义格式
标签: data-structures floating-point format