Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Костяныч
16 / 16 / 4
Регистрация: 31.10.2010
Сообщений: 1,238
Записей в блоге: 2
#1

Конвертация переменной типа string в массив int - C++

08.06.2015, 11:31. Просмотров 391. Ответов 13
Метки нет (Все метки)

Добрый день.
Есть строка string выглядит следующим образом:
C++
1
string str = "01 07 45 0F 12 00 02 09 10 BA 00 34 33 30 35 32 31 31 33";
Т.е. там байты.
http://www.cyberforum.ru/cpp-beginners/thread331428.html
Как мне перевести эту информацию в массив int ?
Спасибо.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.06.2015, 11:31
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Конвертация переменной типа string в массив int (C++):

Передать массив элементов(типа int) объекта, в функцию из массивов(типа int)
Представьте такую ситуацию. Есть у вас массив чисел: Mass И вы хотите...

Конвертация строкового типа в int
Как из вот этого textBox1->TextChanged сделать переменную типа int ? я пытался...

Рекурсивная конвертация чисел int в string и наоборот (ошибка)
Доброго времени суток! Есть 2 метода которые предназначены для конвертации...

Не происходит конвертация типа int в float
int r = 130; r = (float)r/255; r равен 0. Почему не произошла конвертация...

Записать адрес переменной произвольного типа в переменную типа int
Здравствуйте, есть структура __packed struct myStruct{ uint32 HisCh; ...

13
Max Dark
шКодер самоучка
1886 / 1686 / 832
Регистрация: 09.10.2013
Сообщений: 3,741
Записей в блоге: 6
Завершенные тесты: 2
08.06.2015, 11:53 #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <vector>
#include <sstream>
 
std::vector<int> from_hex(const std::string& s) {
    std::istringstream iss(s);
    std::vector<int> result;
    for (;;) {
        int tmp;
        iss >> std::hex >> tmp;
        if (!iss.good())
            break;
        result.push_back(tmp);
    }
    return result;
}
1
Velesthau
524 / 426 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
08.06.2015, 11:59 #3
Лучший ответ Сообщение было отмечено Костяныч как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <iterator>
#include <sstream>
#include <vector>
#include <algorithm>
 
...
    std::string str = "01 07 45 0F 12 00 02 09 10 BA 00 34 33 30 35 32 31 31 33";
    std::istringstream istr(str);
    std::vector<int> v;
    istr.setf(std::ios::hex, std::ios::basefield);
    std::copy(std::istream_iterator<int>(istr), std::istream_iterator<int>(), std::back_inserter(v));
1
castaway
Эксперт С++
4926 / 3033 / 453
Регистрация: 10.11.2010
Сообщений: 11,089
Записей в блоге: 10
Завершенные тесты: 1
08.06.2015, 11:59 #4
C++
1
2
3
4
5
6
7
8
    std::string str = "01 07 45 0F 12 00 02 09 10 BA 00 34 33 30 35 32 31 31 33";
 
    size_t n = (str.length() + 1) / 3;
    int * arr = new int [n];
 
    for ( size_t i = 0; i < n; ++i ) {
        arr[i] = std::stoi( str.substr( i * 3, 2 ), 0, 16 );
    }
1
Костяныч
16 / 16 / 4
Регистрация: 31.10.2010
Сообщений: 1,238
Записей в блоге: 2
08.06.2015, 12:08  [ТС] #5
castaway, чет у меня пишет :"Undefined symbol i" и говорит, что символ ";" нужен где-то в районе for(....).
0
Рыжий Лис
Просто Лис
900 / 438 / 315
Регистрация: 17.05.2012
Сообщений: 1,795
Записей в блоге: 7
08.06.2015, 12:13 #6
Костяныч
C++
1
for (int i = 0; i < n; ++i ) {
Добавлено через 15 секунд
Костяныч
C++
1
for (int i = 0; i < n; ++i ) {
1
Tulosba
:)
Эксперт С++
4746 / 3240 / 496
Регистрация: 19.02.2013
Сообщений: 9,046
08.06.2015, 12:13 #7
Velesthau, кстати, начиная с C++11 строку 12 можно чуть укоротить:
C++
1
std::copy(std::istream_iterator<int>(istr), {}, std::back_inserter(v));
3
Костяныч
16 / 16 / 4
Регистрация: 31.10.2010
Сообщений: 1,238
Записей в блоге: 2
08.06.2015, 12:15  [ТС] #8
stoi - что за метод?
0
Tulosba
:)
Эксперт С++
4746 / 3240 / 496
Регистрация: 19.02.2013
Сообщений: 9,046
08.06.2015, 12:18 #9
Цитата Сообщение от Костяныч Посмотреть сообщение
stoi - что за метод?
http://www.cplusplus.com/reference/string/stoi/
Должна быть поддержка C++11
1
castaway
Эксперт С++
4926 / 3033 / 453
Регистрация: 10.11.2010
Сообщений: 11,089
Записей в блоге: 10
Завершенные тесты: 1
08.06.2015, 12:20 #10
Цитата Сообщение от Костяныч Посмотреть сообщение
castaway, чет у меня пишет :"Undefined symbol i" и говорит, что символ ";" нужен где-то в районе for(....).
Я понятия не имею что ты там понаписал.

Цитата Сообщение от Костяныч Посмотреть сообщение
stoi - что за метод?
Обычная функция. Нужен С++11.
1
Костяныч
16 / 16 / 4
Регистрация: 31.10.2010
Сообщений: 1,238
Записей в блоге: 2
08.06.2015, 12:21  [ТС] #11
castaway, как мне узнать, какой у меня c++?
0
castaway
Эксперт С++
4926 / 3033 / 453
Регистрация: 10.11.2010
Сообщений: 11,089
Записей в блоге: 10
Завершенные тесты: 1
08.06.2015, 12:28 #12
Цитата Сообщение от Костяныч Посмотреть сообщение
castaway, как мне узнать, какой у меня c++?
Я даже не знаю что тебе на это ответить..

Добавлено через 4 минуты
Костяныч, какой компилятор у тебя?
1
Костяныч
16 / 16 / 4
Регистрация: 31.10.2010
Сообщений: 1,238
Записей в блоге: 2
08.06.2015, 13:11  [ТС] #13
Velesthau, спасибо за помощь.

Добавлено через 8 минут
А обратно этот вектор в стринг через пробел значениями?
0
Tulosba
:)
Эксперт С++
4746 / 3240 / 496
Регистрация: 19.02.2013
Сообщений: 9,046
08.06.2015, 14:14 #14
Цитата Сообщение от Костяныч Посмотреть сообщение
А обратно этот вектор в стринг через пробел значениями?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <iterator>
#include <sstream>
#include <vector>
#include <algorithm>
#include <iomanip>
 
int main() {
    
    std::string str = "01 07 45 0F 12 00 02 09 10 BA 00 34 33 30 35 32 31 31 33";
    std::istringstream istr(str);
    std::vector<int> v;
    istr.setf(std::ios::hex, std::ios::basefield);
    std::copy(std::istream_iterator<int>(istr), {}, std::back_inserter(v));
    
    std::ostringstream ostr;
    ostr.setf(std::ios::hex, std::ios::basefield);
    ostr.fill('0');
    std::for_each(v.begin(), v.end(), [&ostr](const int& i) { ostr << std::setw(2) << i << ' '; } );
    std::cout << ostr.str() << std::endl;
    return 0;
}
1
08.06.2015, 14:14
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.06.2015, 14:14
Привет! Вот еще темы с решениями:

Как присвоить значение одного из элементов массива типа char переменной типа int?
С++ начал буквально только что так что буду благодарен за терпение и понимание...

Значение переменной типа int
Я хочу присвоить переменной типа int значение 2147483648, а в gdb я посмотрел...

Как цифру преобразовить с типа String в тип int ?
в типе char это функция atoi а в динамической строке?

Максимальное значение переменной типа int
Если тип long в 2 раза больше чем int. Сколько максимум в int? В чём они...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru