2011-03-07 5 views
2

я строка определяется как std::string header = "00110033"; теперь мне нужно строку для хранения значений байта цифр, как будто его построили как этотПреобразование INT [] в строку в C++

char data_bytes[] = { 0, 0, 1, 1, 0, 0, 3, 3}; 
std::string header = new std::string(data_bytes, 8).c_str()); 

я преобразовал исходную строку до int массив с использованием atoi. Теперь я не уверен, как сделать строку из нее. Дайте мне знать, если есть лучший подход.

+1

Я не могу понять ваш вопрос. – Nawaz

+0

неправильный синтаксис 2-й строки. Кроме того, каково намерение «нового» здесь? –

+0

Зачем вам это нужно? Что вы собираетесь делать, если массив содержит значение, которое не находится между 0 и 9? –

ответ

2

вы могли бы написать небольшую функцию

string int_array_to_string(int int_array[], int size_of_array) { 
    string returnstring = ""; 
    for (int temp = 0; temp < size_of_array; temp++) 
    returnstring += itoa(int_array[temp]); 
    return returnstring; 
} 

непроверенной!

несколько иной подход

string int_array_to_string(int int_array[], int size_of_array) { 
    ostringstream oss(""); 
    for (int temp = 0; temp < size_of_array; temp++) 
    oss << int_array[temp]; 
    return oss.str(); 
} 
+0

Спасибо, работает как шарм – Manoj

+0

Нет проблем! Рад помочь. – ultifinitus

+1

@ultifinitus atoi преобразует строку в int, тогда как вам нужно преобразовать int в строку. Вам нужно использовать itoa, который не является стандартной функцией, поэтому, вероятно, лучшим решением является преобразование int в символ, добавив «0» (см. Мое решение). Вы также можете использовать лексические актеры: 'boost :: lexical_cast (int_array [temp]);' – UmmaGumma

2

ли это:

char data_bytes[] = { '0', '0', '1', '1', '0', '0', '3', '3', '\0'}; 
    std::string header(data_bytes, 8); 

Или, может быть, вы хотите сделать это:

std::stringstream s; 
    s << data_bytes; 
    std::string header = s.str(); 

Demo в ideone: http://ideone.com/RzrYY


EDIT:

Последний \0 в data_bytes необходимо. Также см. Этот интересный вывод здесь: http://ideone.com/aYtlL

PS: Я не знал этого раньше, благодаря Ashot Я познакомился с этой разницей, поэкспериментируя!

+2

Вы не можете хранить ints в массиве char –

+0

@Nicklamort: Кто сказал? – Nawaz

+0

@Nawaz -1 data_bytes не заканчивается на '\ 0', поэтому вы не можете его распечатать. + В обоих случаях ваша строка не будет равна строке («00110033»); – UmmaGumma

1
char data_bytes[] = { 0, 0, 1, 1, 0, 0, 3, 3}; 
    std::string str; 
for(int i =0;i<sizeof(data_bytes);++i) 
     str.push_back('0'+data_bytes[i]); 
+0

+1. лучше, чем моя! – Nawaz

1

Предполагая, что вы используете «достаточно нормальное» систему, в которой числовые значения '0' для '9' являются последовательными, вы можете просто итерацию по каждому элементу и вычитают '0':

for(int i = 0; i < header.size(); ++i) 
{ 
    header[i] -= '0'; 
} 
+0

Разве вы не добавляете вместо вычитания? –

+0

@Eugen Constantin Dinca OP имеет строку типа «00111» и хочет, чтобы она была переведена на один с этими фактическими значениями байтов, например «00111» -> «\ 000 \ 000 \ 001 \ 001 \ 001». Таким образом вы вычтите. –

1

Вы можете сделать это:

std::string header(data_bytes, data_bytes + sizeof(data_bytes)); 
std::transform(header.begin(), header.end(), header.begin(), 
    std::bind1st(std::plus<char>(), '0')); 
Смежные вопросы