Преобразование int [] в строку в C ++ - PullRequest
4 голосов
/ 07 марта 2011

У меня есть строка, определенная как std::string header = "00110033";, теперь мне нужна строка для хранения байтовых значений цифр, как если бы она была построена следующим образомиспользуя atoi.Теперь я не уверен, как сделать из этого строку.Дайте мне знать, если есть какой-то лучший подход.

Ответы [ 5 ]

3 голосов
/ 07 марта 2011

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

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();
}
2 голосов
/ 07 марта 2011

Сделайте это:

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

Демонстрация на ideone: http://ideone.com/RzrYY


EDIT:

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

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

1 голос
/ 07 марта 2011

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

std::string header( data_bytes, data_bytes + sizeof( data_bytes ) );
std::transform( header.begin(), header.end(), header.begin(), 
     std::bind1st( std::plus< char >(), '0' ) );
1 голос
/ 07 марта 2011

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

for(int i = 0; i < header.size(); ++i)
{
    header[i] -= '0';
}
1 голос
/ 07 марта 2011
 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]);
...