使用std :: string存储二进制数据是不合适的吗?

时间:2014-05-05 14:42:34

标签: c++ string binary

我很惊讶地在this question中看到有人修改了一个工作片段,因为正如第二个答案的作者所说:

  

对我来说,我应该使用二进制数据似乎不合适   存储在std :: string对象中

我不应该这样做吗?

1 个答案:

答案 0 :(得分:7)

对于二进制数据,我认为最好的选择是std::vector<unsigned char>

在技术上有效时使用std::string会向用户发送错误消息,表明正在处理的数据是文本。

另一方面,能够接受字符串中的任何字节非常重要,因为有时您知道内容是文本,但是使用的是未知编码。强制std::string仅包含有效和解码的文本将是对现实世界使用的一个很大的限制。

这种限制是关于QString我不喜欢的一件事:这个限制使得例如如果文件名具有&,则无法使用文件选择对话框来打开文件#34;错误&#34; (意外)编码或编码实际上是无效的(它包含错误)。