如何从linux二进制文件中存储和检索数据

Posted

技术标签:

【中文标题】如何从linux二进制文件中存储和检索数据【英文标题】:How to store and retrieve data from linux binary file 【发布时间】:2019-05-21 10:07:42 【问题描述】:

我正在使用 arm-none-linux-gnueabi-g++ 来编译可在嵌入式 Linux 设备上运行的 c++ 代码。

我在 windows 下使用 arm-none-linux-gnueabi-g++ 并获取将在 Linux 机器上运行的二进制文件作为输出。

为了使用新的二进制文件设置嵌入式设备,我需要使用二进制文件和更多设置文件创建一个存档文件 (zip)。

到目前为止一切正常。

我需要将其自动化,以便以二进制文件版本的名称自动创建存档文件。

目前,我们将版本保留为代码中的简单常量 std::string 变量。我们在打印诊断、日志等时使用该字符串。

如何从版本二进制文件中读取?

或者其他方法可以实现这个目标?

我认为可以将它存储在二进制文件中的某个恒定位置并从那里读取它,但真的不知道如何在不破坏二进制文件的情况下做到这一点。

【问题讨论】:

【参考方案1】:

您正在自动创建文件,因此我假设您首先对其进行编译,然后使用生成的二进制文件进行存档。

您可以将版本存储在一个文本文件中,并将 #include 该文件存储在您的代码中:

const std::string version = 
#include "version.txt"
;

version.txt

"version string"

并且在制作存档时,您可以轻松地从文本文件中解析版本。

【讨论】:

我实际上会使用宏(通过 -D 传递)但是是的。【参考方案2】:

维尔是正确的。

你目前正在倒退!

您的构建系统应该为可执行文件提供版本,而不是相反。修复此问题后,您的构建系统可以为其他元素提供相同的版本,例如您的 ZIP 文件名。

理想情况下,版本将由版本控制自动生成,但如果确实需要,您可以在构建命令中指定它。

可以从二进制文件中提取一些字符串(想想nm,如果有 Windows 等效项),但这实际上是相反的方法。

【讨论】:

确实是一个简单而好的答案!知道如何将一些数据存储到二进制可执行文件并将其读回仍然很有趣

以上是关于如何从linux二进制文件中存储和检索数据的主要内容,如果未能解决你的问题,请参考以下文章

从 mysql 数据库中检索图像时引发异常

检索存储在我的 Mlab 中的音频 - 二进制文件

从 Android sqlite 数据库中检索大 blob

如何转换从文本文件中读取的整数并存储为具有16位整数的二进制文件?

文件属性

java如何把一个以文本存储的文件转化为二进制文件