2015-03-28 5 views
1

У меня есть массив типа uint8_t. Я хочу создать строку, которая объединяет каждый элемент массива. Вот моя попытка использовать ostringstream, но после этого строка кажется пустой.Преобразование массива uint8_t в строку в C++

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; 
+2

Как вы хотите, чтобы ваш 'uint8_t' быть преобразованы: как числа или символы? Например, если 65 станет «65» или «А»? –

+0

Я думаю, что эта ссылка поможет вам http://stackoverflow.com/questions/29298204/three-integers-into-1-string-with-spacebars/29298421#29298421 –

+0

'key' кажется вашим источником данных и данными , Не могли бы вы исправить свой код? –

ответ

2

Попробуйте это:

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), чтобы увидеть фактические персонажи.


EDIT: Если массив содержит 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.

+0

Без трансляции строка остается пустой. С броском он работает. Если массив ключей содержит 0x1F, 0x1F, 0x1F, 0x1F и 0x1F, тогда я хочу, чтобы строка была 1F1F1F1F1F. – Josephus

+0

Чтобы напечатать значения в виде верхнего регистра, вы можете использовать манипуляторы 'std :: uppercase' и' std :: hex'. Я отредактировал свой ответ, чтобы добавить эту информацию. – Ove

+0

Дело не слишком важно. Но std :: hex и int casting были идеальны. Спасибо! – Josephus

1

Это работает для меня:

#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));