我想在我的应用程序中测试序列化数据转换,目前该对象存储在文件中并读取二进制文件并重新加载对象。
在我的单元测试用例中,我想测试这个操作。由于文件操作成本很高,我想在代码本身中对二进制文件内容进行硬编码。
我该怎么做?
目前我正在尝试这样,
std::string FileContent = "\00\00\00\00\00.........";
它不起作用。
答案 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 };