从 txt 文件初始化 uint8_t 数组

initialize uint8_t array from txt file

我在 .txt 文件中已经格式化了一个 uint8_t 数组,如下所示:

0x4d, 0x5a, 0x90, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00,
0xb8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,

我需要像这样从 C++ 初始化它:

static const uint8_t binary[] = { 0x4d, 0x5a, 0x90, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, }

老实说,我对 C++ 有点陌生。

.txt 文件是将十六进制值存储为字节,还是存储为 4 个字符,用文字逗号和空格表示十六进制值?

如果您要存储实际的十六进制值,代码将变得非常简单

#include <fstream>
#include <vector>

// input file stream
std::ifstream is("MyFile.txt"); 

// iterators to start and end of file
std::istream_iterator<uint8_t> start(is), end; 

// initialise vector with bytes from file using the iterators
std::vector<uint8_t> numbers(start, end); 

如果我正确理解你的问题,你只需要在数组声明的地方包含你的文本文件:

static const uint8_t binary[] = {
#include "array.txt"
};

如果文本文件完全如您所示显示,并且您想在编译时初始化数组,则您可以简单地 #include 文件,例如:

static const uint8_t binary[] = {
#include "text.txt"
}

否则,您将不得不在运行时打开文本文件,例如使用 std::ifstream,读取其上下文并从中解析字节值,然后动态分配和填充数组,例如通过使用 std::vector.