У меня есть массив типа 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
класс похож на строителя строк. Вы можете добавить значения к нему, и когда вы закончите, вы можете вызвать его .str()
способ получить std::string
это содержит все, что вы положили в него.
Вам нужно разыграть uint8_t
значения для int
прежде чем добавить их в ostringstream
потому что, если вы этого не сделаете, он будет рассматривать их как символы. С другой стороны, если они представляют символы, необходимо удалить (int)
бросить, чтобы увидеть реальных персонажей.
РЕДАКТИРОВАТЬ: Если ваш массив содержит 0x1F 0x1F 0x1F, и вы хотите, чтобы ваша строка была 1F1F1F, вы можете использовать std::uppercase
а также std::hex
манипуляторы, вот так:
std::ostringstream convert;
for (int a = 0; a < key_size_; a++) {
convert << std::uppercase << std::hex << (int)key[a];
}
Если вы хотите вернуться к десятичной и строчной букве, вам нужно использовать std::nouppercase
а также std::dec
.
Это работает для меня:
#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));