【发布时间】:2020-03-08 00:03:19
【问题描述】:
我经常希望将来自外部文件的二进制数据作为uint8_t 数组包含(编译)到我的程序(嵌入式或裸机)中。
有没有办法无需将它们转换为十六进制数组的额外步骤? 因为这涉及额外的构建步骤,这些步骤有时并不那么容易集成,例如如果是 Arduino 工具链。并且手动执行此操作总是会导致忘记十六进制更新:-)
通常我使用 gcc。因此,如果它是特定于 gcc 的编译指示或其他扩展,我也会很高兴(尽管不如通用解决方案那么高兴)。
可能是这样的
static const __attribute__((rawDataFromFile("myDataFile.bin"))) uint8_t s_data[];
而不是经典的对外方式bin2hex myDataFile.bin myDataFile.hex
和
static const uint8_t s_data[] = {
#include "myDataFile.hex"
};
在C 和C++ 中工作的解决方案将是首选,但也欢迎仅在两者之一中工作的建议。
【问题讨论】:
-
我不知道。我也很感兴趣,因为我通常只在我的几代人中使用
xxd -i filename.bin,这至少具有轻松将依赖规则合并到makefile中的优点。 -
建议添加
std::embed以标准化方式在源文件中嵌入任意数据,而无需手动将它们转录为字符串文字或十六进制:p1040R0