Как задать массив char из числа

Тема в разделе "Флудилка", создана пользователем Дятел, 8 авг 2021.

  1. Дятел

    Дятел Нерд

    Есть переменная
    unsigned long i=1111111844743; // (13 цифр)
    нужно получить массив символов
    char char_array[]=i;// так, разумеется не прокатывает. А как сделать?

    1. Вначале сделал
    String str = String(i);
    Получил строку 1111111844743

    2. Теперь надо преобразовать в CHAR? другого способа не нашел.
    попробовал на основе примера
    Код (C++):
    // Define
    String str = "This is my string";

    // Length (with one extra character for the null terminator)
    int str_len = str.length() + 1;

    // Prepare the character array (the buffer)
    char char_array[str_len];

    // Copy it over
    str.toCharArray(char_array, str_len);
    сделал:
    Код (C++):
    char char_array[14];//и так знаю сколько символов и прибавил 1

    str.toCharArray(char_array, 14);
    Serial.print ("=!=!====: "); Serial.print (str[4]); Serial.println (str[5]);
    Serial.println (str);
    delay(1000);
     
    Выводит на экран:
    =!=!====: 28
    3010282375

    28 - это 4 и 5 символ в массиве (порядок от нуля)
    почему число то другое, там же были символы
    1111111844743 а не 3010282375

    Попробовал выводить и так,
    Код (C++):
    Serial.print ("=!=!====-: "); Serial.print (char_array[4]); Serial.println (char_array[5]);
    Serial.println (char_array);
    но выдает те же числа: 28 и 3010282375

    Подскажите, пожалуйста, как сконвертировать строку в CHAR.
    А может даже сразу число unsigned long в массив CHAR
     
  2. parovoZZ

    parovoZZ Гуру

    Строка - это и есть массив чаров
     
  3. Дятел

    Дятел Нерд


    Спасибо за ответ, но что строка и есть массив чаров - понятно, непонятно как из строки сделать чар!
    и откуда вылезает
    3010282375
    вместо
    1111111844743
     
  4. akl

    akl Гуру

    1111111844743 в унсигнед лонг не влезет - делай унсигнед лонг лонг или uint64_t
     
    Дятел нравится это.
  5. Дятел

    Дятел Нерд

    Спасибо за подсказку, добрый человек! :)) Чего-то казалось, что 13 цифр помещается :(
    Убрал 3 цифры и все стало на место.
    А вот с uint64_t у меня не вышло
    выдает ошибку в этой строке
    String str = String(i);
    call of overloaded 'String(uint64_t&)' is ambiguous
    как понимаю, переполнение
    пока вышел из положения
    String str = "111" + String(i); оставив unsigned long
    Но хотелось бы все же всю 13ти разрядную цифру использовать
     
  6. akl

    akl Гуру

    в унсигнед лонг влезает максимум 4294967295.
    а зачем вообще нужна именно цифра? с ней планируются какие-то математические операции?
     
  7. akl

    akl Гуру

    еще как вариант попробовать double
     
  8. Дятел

    Дятел Нерд

    штрихкод в котором находятся данные
    думаю, не прокатит
    "
    double
    4 байта Для AVR то же самое, что float
    . А так он 8 байт на более взрослом железе "
     
  9. akl

    akl Гуру

    все равно не понял - если это число не будет ни на что делиться, умножаться, вычитаться, прибавляться и т.д., и оно нужно только в виде строки, то лучше сразу его и создавать в виде строки
    char str[]="1111111844743";
     
  10. parovoZZ

    parovoZZ Гуру

    никак. char - это один символ. ВСЕГДА. Строка - это несколько символов. ВСЕГДА.
     
  11. Дятел

    Дятел Нерд

    но число-то генерится из данных, а они переменные и цифры
    А как же чар как массив символов?
     
    Feofan нравится это.
  12. Ariadna-on-Line

    Ariadna-on-Line Гуру

    toCharArray() - Оно ?
     
  13. parovoZZ

    parovoZZ Гуру

    сам понял, что написал?
    вот, для изучения
    http://cppstudio.com/post/389/
    как изучишь, можно приступать к строкам
    http://cppstudio.com/post/437/
     
  14. akl

    akl Гуру

    как конкретно генерится?
     
  15. b707

    b707 Гуру

    char - это символ по английски
    массив символов = array of chars

    Поэтому ваша фраза "чар как массив символов" - это пример полнейшей белиберды.

    По сути вопроса - раз 13 цифр ни в одном типе Ардуино не помещаются. попробуйте разбить их на два числа и генерить отдельно, например сначала 1111111, а потом 844743
    А полученные строчки просто "склеить" в строку "1111111844743"
     
  16. Дятел

    Дятел Нерд

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

    пока не знаю, этот вопрос отложил на потом, сейчас для меня было главное сделать в минимально примитивном виде и понять возможности.

    .
     
  17. akl

    akl Гуру

    так надо сначала именно это и выяснить. может окажется что проще в процессе генерации сразу в строку складывать, а не городить огромное число.
     
  18. Дятел

    Дятел Нерд

    Разумно, я так и поступил, о чем и писал сразу же после вашего, что пока проблема решена именно таким способом.
    скорее всего так и останется.
    попробовал описать свои неудобства, но получается громоздко и непонятно,. вроде все решаемо, так что для меня вопрос пока решен. Спасибо за помощь :)