如何将二进制数据硬编码为字符串

时间:2016-07-22 15:13:25

标签: c++ c++11 binaryfiles

我想在我的应用程序中测试序列化数据转换,目前该对象存储在文件中并读取二进制文件并重新加载对象。

在我的单元测试用例中,我想测试这个操作。由于文件操作成本很高,我想在代码本身中对二进制文件内容进行硬编码。

我该怎么做?

目前我正在尝试这样,

std::string FileContent = "\00\00\00\00\00.........";

它不起作用。

2 个答案:

答案 0 :(得分:2)

你是对的,字符串可以包含'\0',但是你仍然在const char*初始化它,根据定义,它在第一个'\0'处停止。我建议您使用uint8_t[]甚至uint32_t[](即,不传递给std::string),即使第二个可能有最多3个字节的开销(但它更紧凑)在源头)。那是例如如何存储X位图。

另一种可能性是base64编码,它是可打印的,但需要(相对快速的)解码。

如果确实希望将const char[]放到std::string,请先将指针转换为const char*,然后使用{的{-1}}构造函数。 {1}}。虽然std::string确实可以保存std::string,但它在某种程度上是将二进制文件存储在字符串中的反模式,因此我没有给出确切的代码,只是提示。

答案 1 :(得分:2)

以下内容可以满足您的需求,但可能不建议使用,因为大多数人都不希望std::string包含空字节。

std::string FileContent { "\x00\x00\x00\x00\x00", 5 };