从 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);
在某些代码中使用 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);