我有一个类型为uint8_t的数组。我想创建一个连接数组的每个元素的字符串。这是我尝试使用ostringstream,但之后字符串似乎是空的。
std::string key = "";
std::ostringstream convert;
for (int a = 0; a < key_size_; a++) {
convert << key_arr[a]
key.append(convert.str());
}
cout << key << endl;
答案 0 :(得分:3)
试试这个:
std::ostringstream convert;
for (int a = 0; a < key_size_; a++) {
convert << (int)key[a];
}
std::string key_string = convert.str();
std::cout << key_string << std::endl;
ostringstream
类就像一个字符串生成器。您可以为其添加值,当您完成后,您可以调用它的.str()
方法来获取包含您放入其中的所有内容的std::string
。
在将uint8_t
值添加到int
之前,您需要将ostringstream
值转换为(int)
,因为如果不这样做,则会将它们视为字符。另一方面,如果它们确实表示字符,则需要删除std::ostringstream convert;
for (int a = 0; a < key_size_; a++) {
convert << std::uppercase << std::hex << (int)key[a];
}
强制转换以查看实际字符。
编辑:如果您的数组包含0x1F 0x1F 0x1F并且您希望您的字符串为1F1F1F,则可以使用std::uppercase
和std::hex
操纵器,如下所示:
{{1}}
如果您想返回小数和小写,则需要使用std::nouppercase
和std::dec
。
答案 1 :(得分:3)
这对我有用:
#include <string>
#include <iostream>
int main()
{
uint8_t arr[] = {'h', 'i'};
std::string s;
s.assign(arr, arr + sizeof(arr));
std::cout << s << '\n';
}
您也可以使用字符串的构造函数:
std::string s(arr, arr + sizeof(arr));
答案 2 :(得分:0)
可能是最简单的方法
uint16_t arr[];
// ...
std::string str = reinterpret_cast<char *>(arr);
或 C 风格:
std::string str = (char *) arr;