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;
4

2 回答 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包含您放入其中的所有内容的 a。

您需要在将它们添加到之前将uint8_t值转换为,因为如果不这样做,它将把它们视为字符。另一方面,如果它们确实代表字符,则需要删除演员表才能看到实际字符。intostringstream(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::nouppercaseand std::dec

于 2015-03-28T17:48:38.183 回答
1

可能最简单的方法是

uint8_t arr[];
// ...
std::string str = reinterpret_cast<char *>(arr); 

或 C 风格:

std::string str = (char *) arr;
于 2021-02-11T20:17:52.450 回答