Перевод string в int

Тема в разделе "Arduino & Shields", создана пользователем Иван С, 1 июн 2012.

  1. Иван С

    Иван С Гик

    Кто нибудь сталкивался с такой проблемой? Попытка явного перевода из строки в число (int number = int("21")) выдаёт ошибку (error: invalid cast from type 'String' to type 'int'), а со строками не очень удобно работать.
     
  2. Unixon

    Unixon Оракул Модератор

    Естественно выдает ошибку. Нет в С/C++ такого приведения типов. Используйте atoi() или sscanf().
     
  3. Иван С

    Иван С Гик

    atoi() - это круть, но просит на вход const char*, а я могу максимум char сделать(
    Где здесь копать?
    Хотя тут char используют...
     
  4. Unixon

    Unixon Оракул Модератор

    Там в примере массив символов. :)
    А char [] и char * это, можно сказать, одно и то же.
     
  5. Иван С

    Иван С Гик

    Может в коде ошибка?
    Код (Text):
    someint = atoi(strToChar(valvePin);
     
    char strToChar(String str){
      int ln = str.length();
      char rez[ln];
      for(int i = 0; i < ln; i++){
        rez[i] = char(str[i]);
      }
      return rez;
    }
    atoi ругается на то, что это не CONST CHAR...
     
  6. Unixon

    Unixon Оракул Модератор

    Так нельзя делать. Сейчас напишу...

    Код (Text):

    const int n = 10;
    char *z = new char[n];
    String s = "12345";
    s.toCharArray(z,n);
    int x = atoi(z);
    // ...
    delete[] z;
     
     
  7. Steelwolf

    Steelwolf Нерд

    Ага, все дело в указателях.
     
  8. Иван С

    Иван С Гик

    Вроде стало лучше, но вылезла другая ошибка :( (undefined reference to `operator new[](unsigned int)').
    Выходит мой компилятор не знаком с оператором new :confused::)
    Правда я позволил себе внести правки), хотя в вашем примере было так же, плюс на delete ругался...

    Код (Text):
    int strToInt(String str){
      const int c = 10;
     // int ln = str.length();
      char *rez = new char[c];
      str.toCharArray(rez, c);
      int rez2 = atoi(rez);
      return rez2;
    }
     
  9. Unixon

    Unixon Оракул Модератор

    Используйте пока статический массив. Только тогда приведение типов к (char *) руками сделайте.
     
  10. Иван С

    Иван С Гик

    Вроде работает. Я создал массив (статический) так, что бы с запасом было, а функции toCharArray передаю нужное кол-во символов.
     
  11. Корней

    Корней Гик

    И в 0.22 и в 1.0 среде ардуино есть метод long toInt() у String.
     
    Unixon нравится это.
  12. Unixon

    Unixon Оракул Модератор

    :oops: Каюсь, проглядел. Вот знал же, что оно там должно быть! Полез вместо справочника правду искать прямо в исходники и самое главное пропустил.
     
  13. вопрос был как String перевести в char а отвечают все на вопрос как char перевести в int
     
  14. ИгорьК

    ИгорьК Оракул Модератор

    Код (C++):
    String str = "abs";
    uint8_t ln = str.length();
    uint8_t input[ln] ;
    for(uint8_t i = 0; i < ln; i++ ){
        input[i] = str.charAt(i);
    }
    Как-то так...
     
  15. ошибся как string перевести в int
    если string это число скажем 140815
     
  16. ИгорьК

    ИгорьК Оракул Модератор

    Спасибо за тренировку.
    Код (C++):
    String str = "140815";
    int digits = str.toInt();
     
  17. ostrov

    ostrov Гуру

    А в int поместится 140815? ))
     
    ИгорьК нравится это.
  18. ИгорьК

    ИгорьК Оракул Модератор

    Не-а.
     
  19. Developer-RU

    Developer-RU Гик

  20. ostrov

    ostrov Гуру

    Наш int 2 байта. 4 это у DUE и далее.