【问题标题】:omitting the null string terminator in c++ string在 C++ 字符串中省略空字符串终止符
【发布时间】:2016-10-25 07:07:50
【问题描述】:

在我的小项目中,我试图散列一些位图,位图类似于:“BMP1 /0 位图数据”。我正在使用我在互联网上找到的 md5 哈希库,它的工作原理很简单:

std::string md5(const std::string);

问题是,由于我在内存中间有一个字符串终止符,如果我尝试从这个内存中创建一个字符串,我只能得到第一部分而不是位图数据。所以,我的问题是,我不能在这里完成字符串并将整个数据放入其中吗?提前致谢。

【问题讨论】:

  • 改用std::vector<uint8_t>
  • std::string 可以包含 NUL 字节。 char* 不能。要从包含 NUL 字节的 char 缓冲区构造 std::string,请使用 constructor 4 here。不确定这是否真的是您要问的,您可以添加更多细节吗?也就是说,πάντα ῥεῖ 可能是正确的,md5 并不是真正的文本字符串,而是字节数组,所以std::vector 可能是更好的匹配。
  • 谢谢大家,无论如何我都会尝试使用 4 号构造函数,但我也会查找向量的东西。
  • 再次感谢,在您的帮助下我做到了。
  • 我认为哈希库设计者只是为函数选择了错误的接口。非参考 const 参数已经看起来很可疑。 std::string 参数不适用于通用二进制数据。它应该是std::string md5(std::vector<char> const& data),除非库希望你只散列纯 ASCII 文本。

标签: c++ string md5


【解决方案1】:

如果您查看constructors that std::string provides,您会发现在众多构造函数中,除了以空终止字符串作为参数的构造函数(5)之外,还有一个以指向字符的指针的构造函数字符串和字符数 (4)。该描述特别提到指出的字符串可能包含空字符。这意味着空字符不会终止字符串。

【讨论】:

    猜你喜欢
    • 2021-06-12
    • 2012-01-02
    • 1970-01-01
    • 2023-01-19
    • 1970-01-01
    • 2015-09-02
    • 2011-06-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多