2017-02-10 50 views
2

将C++中的BLOB作为字符串存储可以吗?我猜在BLOB中可能有一个空字符,这可能会导致像len()这样的std :: string操作失败。我试图将一个位图存储为一个BLOB。C++ - 将BLOB存储为字符串

最后,我想这个字符串返回存储到嵌入式数据库和读取串入的std :: string

感谢。

+1

嵌入式空值很好。只是不要在它上面使用'C'字符串函数。大小/长度不取决于内容。 –

+0

当你说“存储”时,你是指在内存中的表示,还是保存到磁盘上的文件? –

+4

据我所知,'std :: string'对象不能确定存储的实际数据,只能在数据的末尾添加一个'null'字符作为与c字符串的兼容性。作为一般原则,如果我要存储原始数据,我宁愿使用'std :: vector '(或'std :: vector '),因为它更准确地表达* intent *,但在数据完整性方面,不应该有任何问题。 – Xirema

回答

1

是的,这很好。 std::string必须单独存储长度,因此它可以包含空字符。只要你有足够的内存,你可以将它存储在一个字符串中。

虽然你确实需要小心构造字符串。如果你只是使用了像std::string s = "Hello,\0 world!"这样的字符,这将不起作用,因为从char*转换只能转到第一个空字符。但是,std::string s("Hello,\0 world!", 14);工作正常。

当然,如果您确实将char*转换为data()c_str(),那么您需要确保抓取长度。