Конвертировать -10 в строку

Тема в разделе "ESP8266, ESP32", создана пользователем Vovka, 24 окт 2020.

  1. Vovka

    Vovka Гик

    Застрял на элементарном. Описана логика преобразований:
    Код (C++):

    String S;
    unsigned char x = 246; // т.е.число -10
    char c;
    c = x; // теперь тут -10
    S.replace( "<!--M-->", String(c, DEC) );
     
    в итоге в S число 246, а нужно -10. Пробовал разные варианты: (char)c, менял "char c" на "int c" - не хочет!
    Может в ESP8266 как-то по другому работают преобразования?
     
  2. parovoZZ

    parovoZZ Гуру

    с какого перепуга?
     
  3. Vovka

    Vovka Гик

    а как написать правильно?
     
  4. parovoZZ

    parovoZZ Гуру

    либо конвертнуть вручную, либо по указателю.
    Я так подозреваю, что компилятор ругнулся и выкинул вообще нафик переменную c.
     
  5. Vovka

    Vovka Гик

    в ручную не вариант. В Visual C++ конвертирует правильно: c = x; // теперь тут -10
    в том то и дело, что не ругнулся!
     
  6. Vovka

    Vovka Гик

    Код (C++):
    c=-10; S.replace( "<!--M-->", String(c, DEC) );
    Что будет в S?
     
  7. Asper Daffy

    Asper Daffy Иксперд

    Вы это сами придумали или сказал кто?

    Не пробовали её (S) напечатать и посмотреть что в ней на самом деле?

    По мне это "типичный случай так-называемого вранья". Нету в S никакого 246. Или Вы нам подсунули не тот скетч, который запускали.
     
  8. Vovka

    Vovka Гик

    Screenshot_1.jpg
    Ладно, сам разберусь! Тема закрыта! :mad:
     
  9. parovoZZ

    parovoZZ Гуру

    так варнинги в дурине выключены по умолчанию.
     
  10. Asper Daffy

    Asper Daffy Иксперд

    Ты не кипятись, а признай, что действительно подсунул совсем не тот скетч в котором проблема (видимо, чтобы поиздеваться).

    В том скетче, что ты привёл в первом посте, S не получает никакого значения - пустая строка. А значит в ней после replace именно пустая строка и останется. И никакого 246 там не будет.

    Ты возьми свой скетч (из первого поста), запусти, убедись, что я прав, извинись за зверскую рожу, тогда я, возможно, тебе и помогу.
     
  11. Asper Daffy

    Asper Daffy Иксперд

    Напрасно подозреваешь, не с чего ему там ругаться.
     
  12. parovoZZ

    parovoZZ Гуру

    я без понятия, что за функция replace (метод?)
     
  13. parovoZZ

    parovoZZ Гуру

    а компилятор типы сам приведёт?
     
    Vovka нравится это.
  14. Vovka

    Vovka Гик

    Для тех, кто столкнется подобным, ответ: signed char
     
    issaom нравится это.
  15. SergeiL

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

    Ну да, согласен. Отбивает всякое желание спрашивать.:(
    Так по умолчанию char и есть - signed char. Или ошибаюсь?
     
  16. Vovka

    Vovka Гик

    Я тоже так думал :(
     
  17. Asper Daffy

    Asper Daffy Иксперд

    Ну, что запустил скетч из первого поста? Убедился, что там нет никакой 246, а есть только пустая строка?
     
  18. Asper Daffy

    Asper Daffy Иксперд

    Какие типы? Чего там приводить? На что конкретно по твоему должен ругаться компилятор?
     
  19. parovoZZ

    parovoZZ Гуру

    char в GCC и IAR это 0...255. Поэтому я всегда пишу uint8_t и int8_t. К чёрту этот char.
     
    mikhail09p, Andrey12 и issaom нравится это.
  20. SergeiL

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

    Когда я познавал Си не было uint8_t и int8_t, были char и unsigned char ;)