Помогите преобразовать тип
- Войдите на сайт для отправки комментариев
Пт, 14/12/2012 - 23:25
Здравствуйте!
помогите пожалуйста кусочком кода...
Есть переменная integer. Принимает значение от 0 до 20.
нужно ее значение записать в char[2]
пример: i=14 то с[0]="1" и с[1]="4"
Спасибо за помощь!
Я бы сделал так:
Оба варианта имеют место жить :)
В первом варианте только нужно объявить буфер достаточной длины, не меньше 3-х.
Есть еще один вариант, itoa.
А вообще, если нужен корректный ответ - нужен корректный вопрос ;) Я про то, как далее будет использоваться строковое значение. Например, если просто вывести в Serial, тогда и преобразование не нужно.
а я бы сделал так :
Я не знал про itoa... спасибо.
PS. А мысль с делением сразу пришла, но как-то читал статью, в которой программист старательно избегал разными путями деления, пояснив, что это очень ресурсоемкое мероприятие...
sprintf - наиболее универсальный вариант, но и более ресурсоемкий, потому что универсальный. Вариант максима самый эффективный, если не рассматривать дальнейшее использование строки. Хотя справедливости ради нужно добавить код '0', чтобы это были символы (chislo/10 + '0' и chislo%10 + '0'). Ну и вариант с itoa - середина :)
Деление, по большому счету, лучше избегать - если деление не на степень двойки (1,2,4,8,16,32..). Например, деление на 4, можно заменить на сдвиг вправо на 2. Хотя всё это философия, нужно смотреть для чего это нужно и нужно ли это.
А вы думаете, что внутри itoa не деление, а какая то волшебная операция?
Топик-стартер не пояснил, что ему нужно строка с кодами АСКИ или просто цифры.
А еще можно сделать без умножения и деления, просто и тупо:
И массив поместить в PROGMEM.
А вы думаете, что внутри itoa не деление, а какая то волшебная операция?
Не берусь спорить, просто выразил свои опасения (я еще "чайник").
Про функцию itoa нашел тут: http://ru.wikipedia.org/wiki/Itoa_(%D0%A1%D0%B8)
там пример ее реализации...
А пример с памятью - шикарен)
Массив хорош, но в жизни не используется, потому что ограничен объемом памяти и набором входных значений.
А наоборот это тоже работает? К примеру присвоить содержимое char to int.
А наоборот это тоже работает? К примеру присвоить содержимое char to int.
Например функция: atoi
http://ru.wikipedia.org/wiki/Atoi
еще можно вычислять значение АСКИ символа - тоесть значение каждого char в массиве. По ASCII http://www.asciitable.com/ таблице - где они идут по порядку, нужно отнять абсолютное значение аски (тоесть значение нуля по таблице - это 48) и получится число, дальше прибавлять его к итоговому int домножая на разрядность.
Например: 52 - берем первый с начала знак 5 - в аски это значение 53 (а 0 это 48) - значит вычитаем из 53 - 48 = 5
умнажаем 5 * 10 и прибавляем в нужный int. получилось в int=50
затем берем 2, в аски это 50, отнимаем 48 (тоесть 0) = 2 *1 + к тому же int = 52
оформляем цикл - получаем автоматическое преобразование - только нужно знать количество знаков в char, чтобы задать размерность цикла и не переборщить с размерностью int.
PS. Выше ИМХО - просьба не пинать)
Как то так?
Спасибо большое!!!!
Как то так?
Вроде и компелятор не ругается, а программа всё равно не работает.
Вот часть кода. Цель, с помощью таймера изменять частоту мигания леда. Величину таймера я посылаю с терминала.
К примеру 013,on,500
013 - Устройство. on - команда "Включить". 500 - 500mS
Что-же я упускаю?
32 строку перенесите и вставьте после 36, иначе в каждом loop, происходит "чудо", если нет данных, buffer очищается И увеличивается i, что явно нежелательно
Рекомендую статью по преобразованию целого в строку
Есть, разобрался!
Теперь работает!
Подскажите, хочу записать в файл строку состоящую из температуры с датчика и времени. И что-то не получается вывести значение температуры. Перевожу из float в char. В порту отображается строка:
а код вот такой:
Подскажите, хочу записать в файл строку состоящую из температуры с датчика и времени. И что-то не получается вывести значение температуры. Перевожу из float в char. В порту отображается строка:
Наталкивался на то что то-ли sprintf, то ли scanf, то ли оба (не помню точно, лень выкапывать) - на ардуине, для экономии памяти реализованы не в полном объеме. представляют собой "обкусанный вариант" который не умеет работать с float. Реализована поддержка только целых и строк.
Так, что, с большой доле вероятности вам нужно будет либо предварительно разбирать celsius на целую и дробную часть и кормить их sprintf-у отдельно. Либо самому делать преобразование float в строку.
Можно так сделать:
только вот не понятно зачем вы только месяц записываете?
Можно так сделать:
только вот не понятно зачем вы только месяц записываете?
благодарю! да это я для теста, чтобы всю строку не писать. А сейчас всё прописал. Еще вот такой вопрос, записываю в имя создаваемого файла значения даты, но больше двух типов(например, месяца и года или дня и месяца) не получается записать, не выводится на монитор порта.
Это почему же? Вот все выводится:
Это почему же? Вот все выводится:
выводиться то выводится, а вот почему-то записывать в файл с таким именем данные он не хочет. Наверное больше 8 символов, как где-то писалось.
выводиться то выводится, а вот почему-то записывать в файл с таким именем данные он не хочет. Наверное больше 8 символов, как где-то писалось.
Не "наверное", а так и есть. "Писалось" в документации Arduino - SD :)
Ну так урежте год и получите 8 символов 17_06_13.txt:
И кстати остальную то строку можно и sprintfом формировать: