在 C++ 中将 uint8_t 的数组转换为字符串
Convert array of uint8_t to string in C++
我有一个 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;
试试这个:
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
class 就像一个字符串生成器。您可以向其附加值,完成后您可以调用它的 .str()
方法来获取包含您放入其中的所有内容的 std::string
。
在将 uint8_t
值添加到 ostringstream
之前,您需要将它们转换为 int
,因为如果不这样做,它们将被视为字符。另一方面,如果它们确实表示字符,则需要删除 (int)
转换才能看到实际字符。
编辑:如果您的数组包含 0x1F 0x1F 0x1F 并且您希望字符串为 1F1F1F,则可以使用 std::uppercase
and std::hex
操纵符,如下所示:
std::ostringstream convert;
for (int a = 0; a < key_size_; a++) {
convert << std::uppercase << std::hex << (int)key[a];
}
如果要返回十进制和小写,需要使用std::nouppercase
and std::dec
.
可能最简单的方法是
uint8_t arr[];
// ...
std::string str = reinterpret_cast<char *>(arr);
或 C 风格:
std::string str = (char *) arr;
我有一个 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;
试试这个:
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
class 就像一个字符串生成器。您可以向其附加值,完成后您可以调用它的 .str()
方法来获取包含您放入其中的所有内容的 std::string
。
在将 uint8_t
值添加到 ostringstream
之前,您需要将它们转换为 int
,因为如果不这样做,它们将被视为字符。另一方面,如果它们确实表示字符,则需要删除 (int)
转换才能看到实际字符。
编辑:如果您的数组包含 0x1F 0x1F 0x1F 并且您希望字符串为 1F1F1F,则可以使用 std::uppercase
and std::hex
操纵符,如下所示:
std::ostringstream convert;
for (int a = 0; a < key_size_; a++) {
convert << std::uppercase << std::hex << (int)key[a];
}
如果要返回十进制和小写,需要使用std::nouppercase
and std::dec
.
可能最简单的方法是
uint8_t arr[];
// ...
std::string str = reinterpret_cast<char *>(arr);
或 C 风格:
std::string str = (char *) arr;