小编Sim*_*mog的帖子

从无符号字符的 std::span 创建 std::string

我正在使用一个 C 库,它使用各种固定大小的unsigned char数组,不带空终止符作为字符串。

我已经将它们转换为std::string使用以下函数:

auto uchar_to_stdstring(const unsigned char* input_array, int width) -> std::string {
  std::string temp_string(reinterpret_cast<const char*>(input_array), width);
  temp_string.erase(temp_string.find_last_not_of(' ') + 1);

  return temp_string;
}
Run Code Online (Sandbox Code Playgroud)

除了使用reinterpret_cast、需要传递数组大小以及我将数组衰减为指针之外,它工作得很好。我试图通过使用 来避免所有这些问题std::span

使用的函数std::span如下所示:

auto ucharspan_to_stdstring(const std::span<unsigned char>& input_array) -> std::string {
  std::stringstream temp_ss;

  for (const auto& input_arr_char : input_array) {
    temp_ss << input_arr_char;
  }

  return temp_ss.str();
}
Run Code Online (Sandbox Code Playgroud)

该函数运行良好,使其他一切变得更简单,而无需跟踪 C 数组的大小。但是,通过一些基准测试(使用nanobench )进一步挖掘表明,新函数比经典方法慢很多倍reinterpret_cast。我的假设是基于 - 的函数for中的循环std::span是这里效率低下的。

我的问题:是否有更有效的方法将固定大小的无符号字符 C 数组从 …

c++ stdstring c++20 std-span

4
推荐指数
1
解决办法
3941
查看次数

标签 统计

c++ ×1

c++20 ×1

std-span ×1

stdstring ×1