从 int8_t 数组创建 std::string
Posted
技术标签:
【中文标题】从 int8_t 数组创建 std::string【英文标题】:Create std::string from int8_t array 【发布时间】:2022-01-02 02:34:09 【问题描述】:在某些代码中使用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[]
类型已传递给构造函数一样。
【问题讨论】:
看到这个问题...***.com/questions/42961443/… 【参考方案1】: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), '\0');
std::string s(std::begin(title), end);
【讨论】:
【参考方案2】:你来了
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 );
【讨论】:
如果数组中没有明确的空终止符,这听起来是个坏主意。 @dave 为什么你决定没有空终止字符? 该数组中应该有 252 个空终止符。 :-) @dave 我虽然同样的事情,然后记得所有缺少的初始化程序都设置为0
,所以它有 252 个空终止符。
对了,没看到 256 的大小。在这种情况下没关系以上是关于从 int8_t 数组创建 std::string的主要内容,如果未能解决你的问题,请参考以下文章
根据缓冲区长度将空终止字符数组复制到 std::string
从 char(不是 char*)到 std::string 的首选转换