【问题标题】:Convert std::vector<uint8_t> to std::string_view将 std::vector<uint8_t> 转换为 std::string_view
【发布时间】:2020-12-09 05:57:06
【问题描述】:

我有一些std::vector&lt;uint8_t&gt; 类型的数据。我想将它解释为一个字符串并对其进行一些子字符串检查。

可以通过将其转换为std::string 来完成,这将导致复制数据。是否可以以某种方式将其转换为std::string_view 并对其进行搜索以避免复制它。

【问题讨论】:

  • 我们是否可以假设您不能首先使用std::string 而不是std::vector
  • 我没有写一个明确的答案,因为我从来没有使用过string_view,但是因为你可以从vector 获得底层指针,你可能只有string_view view((const char*)v.data()); 但喜欢...我不知道这是否正确。一些专家可能会对此提出一些错误
  • 我可以。我已经改变了它并且它有效。我可以删除问题。如果我们不能将原始 std::vector&lt;uint8_t&gt; 更改为 std::string
  • 您要查看uint8_t 还是实际查看char
  • 字符视图。数据实际上是字符串

标签: c++ type-conversion c++17 stdvector string-view


【解决方案1】:

假设char在您的系统上是8位(大多数系统都是),您可以简单地将reinterpret_castvector的数据发送到char*并从中进行查看,例如:

std::vector<uint8_t> data;
...
std::string_view sv(reinterpret_cast<char*>(data.data()), data.size());

或者,在 C++20 中,您可以使用迭代器:

std::vector<uint8_t> data;
...
std::string_view(data.begin(), data.end());

【讨论】:

  • std::basic_string_view&lt;uint8_t&gt; sv(data.data(), data.size()) 可能有用吗?
  • 建议的解决方案将打印字符串的内存表示。根据charsigned 还是unsigned,它的行为会有所不同。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-11
  • 2015-09-15
  • 1970-01-01
  • 1970-01-01
  • 2019-10-20
  • 2021-08-11
  • 2016-03-31
相关资源
最近更新 更多