在C++中将uint8_t数组转换为字符串

6

我有一个类型为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;

3
你希望你的 uint8_t 转换后成为数字还是字符?例如,65 应该变成 "65" 还是 "A"? - Ferdinand Beyer
我认为这个链接会对你有所帮助:http://stackoverflow.com/questions/29298204/three-integers-into-1-string-with-spacebars/29298421#29298421 - Yasir Majeed
“key” 似乎是您的数据源和数据目标。您能修复一下您的代码吗? - Bill Lynch
2个回答

6

试试这个:

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值添加到ostringstream之前,您需要将它们转换为int,因为如果不这样做,它将把它们视为字符。另一方面,如果它们确实表示字符,则需要删除(int)转换以查看实际字符。
编辑:如果您的数组包含0x1F 0x1F 0x1F,并且希望字符串为1F1F1F,则可以使用std::uppercasestd::hex操作器,如下所示:
std::ostringstream convert;
for (int a = 0; a < key_size_; a++) {
    convert << std::uppercase << std::hex << (int)key[a];
}

如果你想将文本转换成十进制并且小写,你需要使用 std::nouppercasestd::dec

没有转换类型,字符串仍为空。有了类型转换,它就可以工作了。如果关键字数组包含0x1F、0x1F、0x1F、0x1F和0x1F,则我希望字符串为1F1F1F1F1F。 - Alex Parker
为了以大写十六进制打印值,您可以使用 std::uppercasestd::hex 操纵符。我编辑了我的答案以添加这些信息。 - Ove
大小写不太重要。但是std::hex和int转换非常完美。非常感谢! - Alex Parker

2
可能最简单的方法是:
uint8_t arr[];
// ...
std::string str = reinterpret_cast<char *>(arr); 

或者C风格:
std::string str = (char *) arr;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接