Преобразование Char в int

Тема в разделе "Arduino & Shields", создана пользователем Симилячник, 10 авг 2016.

  1. Доброго времени суток, господа форумчане!

    Возник вопрос. Как перевести сообщение, приходящее с GPRS шилда(приходит число 33, например) из типа данных char в int?

    Для входящего сообщения создается массив char message[160];
    Требуется считать входящее сообщение, извлечь оттуда число и записать извлеченное число в переменную.

    Еще потом нужно преобразовать String в char.

    Заранее спасибо!
     
    Последнее редактирование: 10 авг 2016
  2. DIYMan

    DIYMan Guest

    Код (C++):
    atoi
    или
    Код (C++):
    String.toInt
    Метод
    Код (C++):
    String.c_str()
    возвращает константный указатель на внутренний буфер символов. Если строку менять не надо - тор сгодится он. Если же что-то в строке надо менять, то у класса String есть оператор [], или - можно перегнать строку в другой буфер, емнип, метода называется toCharArray.
     
  3. А как потом преобразовать String в char для отправки сообщения?

    Есть строка message_to_send = String(helloText + tempText + termValue + degrees + fanOn);
    Но для отправки сообщения нужен массив char.

    Сделал так, но пришла только часть сообщения
    message_to_send = String(helloText + tempText + termValue + degrees + fanOn);
    char mess[];
    message_to_send.toCharArray(mess, sizeof(mess));
    gprs.sendSMS(PHONE_NUMBER, mess);
     
  4. DIYMan

    DIYMan Guest

    Я ответил - метод c_str() класса String.
     
  5. Сделал так, но приходит только часть того, что должно было прийти.
    message_to_send = String(helloText + tempText + termValue + degrees + fanOff);
    char mess[sizeof(message_to_send)];
    message_to_send.toCharArray(mess, sizeof(mess));
    gprs.sendSMS(PHONE_NUMBER, mess);
     
  6. DIYMan

    DIYMan Guest

    Сделайте проще:

    Код (C++):
    gprs.sendSMS(PHONE_NUMBER, message_to_send.c_str());
    и всё.
     
  7. Вот что вылазит.
     

    Вложения:

    • Capture.PNG
      Capture.PNG
      Размер файла:
      7,5 КБ
      Просмотров:
      961
  8. DIYMan

    DIYMan Guest

    Как вариант - кривая библиотека: если она не меняет входной параметр (а я не вижу причин, по которым его надо менять) - то передавать туда просто char* - моветон.

    Дайте ссылку на библиотеку, я посмотрю, для интереса.
     
  9. Это библиотека от Амперки. Лежит тут.
     
  10. При попытке передать в функцию String вылезает это.
     

    Вложения:

    • Capture.PNG
      Capture.PNG
      Размер файла:
      6,4 КБ
      Просмотров:
      921
  11. Тогда такой вопрос. Как можно с помощью char создать сообщение, где текст переплетается с показаниями датчиков?
     
  12. ostrov

    ostrov Гуру

    Да легко. Создаете char/byte массив и запихиваете в него любые данные. Я так делаю формирую пакеты передачи данных.
     
  13. Можно пример? Не представляю себе, так как не работал с char массивами. Со String работал, знаю. Выше показывал. А вот для отправки смс на GPRS shield нужно значение типа char.
     
  14. ostrov

    ostrov Гуру

    Код (C++):
    char massiv[10];
     
  15. Это то понятно, да вот как совместить текст с показаниями датчика, например.
    Доступен ли там оператор + , как в String?
     
  16. Не пойму как преобразовать int в char. Выходит вот что.
     

    Вложения:

    • Capture.PNG
      Capture.PNG
      Размер файла:
      3,7 КБ
      Просмотров:
      552
  17. DIYMan

    DIYMan Guest

    Как я и говорил - кривая библиотека, то, что она от Амперки - ничего не меняет.

    Код (C++):
    bool sendSMS(char* number, char* data)
    Эта функция никак не меняет входные данные, и должна быть объявлена и определена как
    Код (C++):
    bool sendSMS(const char* number, const char* data)
    Если поправить определение и объявление - должно заработать, т.к. sim900.cpp, что лежит в библиотеке, корректно принимает разные типы данных, например, и String, и __FlashStringHelper, а ребята из Амперки, видимо, поленились добавить нужные определения.
     
  18. А где это можно поправить?
     
  19. DIYMan

    DIYMan Guest

    В файлах библиотеки.
     
  20. Уже понял. Сейчас попробую.