Помогите пожалуйста. Как из сторики взять число?

imv14
Offline
Зарегистрирован: 02.04.2014

Добрый день. Подскажите пожалуйста, как из строки, например, "temp=22" взять число 22, типа int.

sandr4
sandr4 аватар
Offline
Зарегистрирован: 11.02.2015
int temp;
temp=22;
Serial.println(temp);

Слово temp у Вас и будет числом "22" типа int.

 

Araris
Offline
Зарегистрирован: 09.11.2012

imv14 пишет:

Добрый день. Подскажите пожалуйста, как из строки, например, "temp=22" взять число 22, типа int.

Если строка типа String, то читайте про String.toInt()

Если типа string, читайте про функцию atoi()

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Каков вопрос, такие и ответы, еще вариант для строки типа char arr[]: найти первую цифру (strcspn), от неё преобразовать в число (atoi)

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Тут правильнее найти знак равно, и сделать шаг к цифрам. Так быстрее.

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Какой вопрос, такой ответ

imv14
Offline
Зарегистрирован: 02.04.2014

Спасибо за ответы, не было времени зайти на форум. Как подсказал brokly, мне надо найти =, а все что после перевести в int. 

imv14
Offline
Зарегистрирован: 02.04.2014

Хочу использовать для установки температуры, через sim900. Допустим отсылаю смс - "term = 22", записываю смс в строку, проверяю что пришо и перевожу в int.

imv14
Offline
Зарегистрирован: 02.04.2014

kisoft, немогли бы объяснить как правильно использовать strcspn.

 

char keys[] = "1234567890";
char keys[] = "1234567890";
kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

По ссылке есть пример с strcspn. А если своими словами, ищем любой символ, указанный в строке 2 (второй параметр) в строке 1 (первый параметр. На выходе выдает индекс найденного символа.

Я соглашусь с тем, что лучше искать символ '=', это проще. strcspn для более других задач :)

char *ptr = strchr(str,'=');
int num = -1;
if(ptr)
{
  ptr++;
  num = atoi(ptr);
}
Serial.println(num);

 

com
Offline
Зарегистрирован: 06.09.2013

для частной задачи, когда строка вида "temp=xx" лучше вообще ничего не искать, а сразу выкусывать 6 и 7 символы и преобразовывать в число :)

 

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Ну тогда так... Их можно не выкусывать а сразу скормить всю строку atoi :) Только мне кажется, что топикстартеру нужно еще знать какой именно параметр он получил. На самом деле самый правильный ответ дал Araris. 

com
Offline
Зарегистрирован: 06.09.2013

если надо определять, какой именно, то значит их ( пар <param>=<value>) несколько. тогда парсить strtok'ом

на самом деле правильного ответа нет, т.к никто не знает, что именно надо ТСу.

возможно, даже сам ТС :)

imv14
Offline
Зарегистрирован: 02.04.2014

спасибо вроде разобрался.

imv14
Offline
Зарегистрирован: 02.04.2014

Добрый день уважаемые знатоки, не стал пладить тему так как вопрос похожий. Получаю ответ от модуля SIM900 о запросе баланса, приходит следующее: +CUSD: 0," Vash balans 68.84 r, используя

char *balanc = strchr(input_buff,'"');// Ищем символ " " "

обрезается +CUSD: 0,, но почемуто естается еще реклама в смс в виде

" vash balans 68.84 r
Vesennie znakomstva v SMS-chat

Подскажите как правильно взять из этой смс "vash balans 68.84 r" или хотя бы просто "68.84 r".
 

Penni
Penni аватар
Offline
Зарегистрирован: 18.01.2015

Много способов есть, я бы регулярные выражения использовал, а то фиг знает как в будующем оператор поменяет сообщение. Можно вот так извратиться :)

char * pch;
pch = strtok(input_buff,"\"r");
pch = strtok(NULL,"\"r");
Serial.println(pch);

 

imv14
Offline
Зарегистрирован: 02.04.2014

Спасибо. А может как то можно только число взять 68.84.

Penni
Penni аватар
Offline
Зарегистрирован: 18.01.2015
char * pch;
pch = strtok(input_buff," ");
for(byte i=0;i<=3;i++)
  pch = strtok(NULL," ");
Serial.println(pch);

Опять же сильно не замарачиваясь, но надо понимать, что это всё частные решения общей задачи. Если оператор будет менять формат сообщений надо будет и тут менять всё.

imv14
Offline
Зарегистрирован: 02.04.2014

Спасибо большое, сейчас попробую.

imv14
Offline
Зарегистрирован: 02.04.2014

Все работает, спасибо Penni.

imv14
Offline
Зарегистрирован: 02.04.2014

Подскажите пожалуйста еще по заполнению строки, для дальнейшей отправки смс. Корректно ли будет сделать вот так:

    char* SMS_string;
  
    strcat(SMS_string, "GUARD-");
    strcat(SMS_string, Statys);
    strcat(SMS_string, "Balance-"); 
    strcat(SMS_string, balance);
    strcat(SMS_string, signal_urov);