从 int8_t 数组创建 std::string

Create std::string from int8_t array

在某些代码中使用 int8_t[] 类型而不是 char[]

int8_t title[256] = {'a', 'e', 'w', 's'};
std::string s(title); // compile error: no corresponding constructor

如何正确安全地从中创建 std::string

当我将执行 cout << s; 时,我希望它打印 aews,就好像 char[] 类型已传递给构造函数一样。

给你

int8_t title[256] = { 'a', 'e', 'w', 's' };
std::string s( reinterpret_cast<char *>( title ) );
std::cout << s << '\n';

或者您也可以使用

std::string s( reinterpret_cast<char *>( title ), 4 );

std::string 和其他容器一样可以使用一对迭代器来构造。如果可用,此构造函数将使用隐式转换,例如将 int8_t 转换为 char.

int8_t title[256] = {'a', 'e', 'w', 's'};
std::string s(std::begin(title), std::end(title));

请注意,此解决方案将复制整个数组,包括未使用的字节。如果数组通常比需要的大得多,您可以改为查找空终止符

int8_t title[256] = {'a', 'e', 'w', 's'};
auto end = std::find(std::begin(title), std::end(title), '[=11=]');
std::string s(std::begin(title), end);