| Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
Разложить число на символы ASCII
17.02.2011, 02:14
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 24.09.2007
Сообщений: 1,437
Сказал спасибо: 287
Сказали Спасибо 339 раз(а) в 202 сообщении(ях)
|
Re: Разложить число на символы ASCII
kison,
Хорошо с этим более менее понятно. Только не совсем.
Как правильно сделать такую штуку
unsigned char sym_out1[4];
float koficient;
koficient=123,25;
sprintf(sym_out1[0], "какието там крокозябры",koficient);
а в масиве стало так
sym_out1[0]==0х31
sym_out1[1]==0х32
sym_out1[2]==0х33
Вот это выражение "какието там крокозябры" как правильно записать.
|
|
|
|
17.02.2011, 02:33
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 13.12.2004
Сообщений: 3,168
Сказал спасибо: 11
Сказали Спасибо 691 раз(а) в 503 сообщении(ях)
|
Re: Разложить число на символы ASCII
Сообщение от 7Fantomas7
|
|
Вот это выражение "какието там крокозябры" как правильно записать.
|
%f
Но учтите что плавучее число обладает некоторыми особенностями. Это не абсолютная точность в первую очередь. 123,25 вполне может оказаться примерно таким - 123,249999999. Так что буфер неплохо немного расширить. Вообще надо брать за правило иметь буфер для вывода sprintf не меньше 20 байт. Лишнее sprintf сама отсечет поставив завершающий 0.
И еще - обычно для экономии памяти используется урезанный вариант (s)printf. Это настраивается в настройках компилятора. Пока не включите правильный вариант этих настроек sprintf не сможет работать с плавучими переменными. Ну и посмотрите на объем программы и время вывода. Полная библиотека обычно обладает немалым объемом и неторопливостью. Если урезанный вариант работающий с целыми переменными более-менее приемлем, то полный может оказаться непозволительной роскошью.
|
|
|
|
17.02.2011, 03:14
|
|
|
Прописка
Регистрация: 02.01.2011
Сообщений: 159
Сказал спасибо: 8
Сказали Спасибо 32 раз(а) в 28 сообщении(ях)
|
Re: Разложить число на символы ASCII
Значение не может быть смешанным, это что такое вообще?
Если надо строку скопировать в буфер - то берём и копируем. Если надо число типа int преобразовать в строку (123-›"123"), то sprintf, itoa или самому написать.
Или еще что-то?
|
Цитата:
|
|
Вот это выражение "какието там крокозябры" как правильно записать.
|
Лучше всего открыть хелп на sprintf и прочитать.
У того же %f есть еще параметры (кол-во цифр после точки, к примеру).
Последний раз редактировалось akimych; 17.02.2011 в 03:17.
|
|
|
|
Сказали "Спасибо" akimych
|
|
|
17.02.2011, 10:37
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 24.09.2007
Сообщений: 1,437
Сказал спасибо: 287
Сказали Спасибо 339 раз(а) в 202 сообщении(ях)
|
Re: Разложить число на символы ASCII
kison,
akimych,
Вы не поняли, просто все что после запятой выбросить и оставить только целую часть.
|
Цитата:
|
|
И еще - обычно для экономии памяти используется урезанный вариант (s)printf
|
Да конечно именно так sprintf я видимо просто ошибся или не правильно выразился и дело тут не в экономии памяти хотя и это имеет не последнее значение. Поэтому или так "%s" или так "%с", только вот не задача как правильно.
|
Цитата:
|
|
Так что буфер неплохо немного расширить. Вообще надо брать за правило иметь буфер для вывода sprintf не меньше 20 байт.
|
Просто нужно то всего 3 разряда или 3 символа и больше не будет и не планируется. Это банально динамическая индикация на 3 разрядный семисегментник и точность великая не нужна хотя и хорошо было бы если б округлять как положено в математике но только без лишних плясок с бубном.
Последний раз редактировалось 7Fantomas7; 17.02.2011 в 10:50.
|
|
|
|
17.02.2011, 11:21
|
|
|
Прописка
Регистрация: 07.02.2010
Адрес: Калининград
Сообщений: 148
Сказал спасибо: 72
Сказали Спасибо 23 раз(а) в 20 сообщении(ях)
|
Re: Разложить число на символы ASCII
Что то не догоняю как ты на 7-ми сегментник собираешься вывести например букву W или X и т.п. В класическом случае делается таблица конвертации из которой делается выборка, как было в АОНах на Z80.
Если надо я на АСМЕ дам пример из своей жизни для LCD конвертация HEX to ASCII переделаешь под себя.
Последний раз редактировалось Maxim39; 17.02.2011 в 11:23.
|
|
|
|
17.02.2011, 11:35
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 24.09.2007
Сообщений: 1,437
Сказал спасибо: 287
Сказали Спасибо 339 раз(а) в 202 сообщении(ях)
|
Re: Разложить число на символы ASCII
Maxim39,
|
Цитата:
|
|
Что то не догоняю как ты на 7-ми сегментник собираешься вывести например букву W или X
|
А я их и не собираюсь выводить.
|
Цитата:
|
|
В класическом случае делается таблица конвертации из которой делается выборка,
|
Так сам же ответил на свой вопрос, именно так и делаю. Символы которые не возможно вывести я и не пытаюсь выводить, а в таблице я их просто забил 0 гашением если даже по какойто причине и будет попытка вывести, да и соотносить таблицы так проще.
|
Цитата:
|
|
Если надо я на АСМЕ дам пример
|
Ну за помощь спасибо. Только я в АСМЕ понимаю чуть лучше чем в китайском балете. Да и зачем, я написал уже все просто возникают конкретные вопросы на которые сам однозначный ответ найти не могу. Я по sprintf прочитал 3 версии документов, вроде одно и тоже а чуток отличается.
Последний раз редактировалось 7Fantomas7; 17.02.2011 в 11:39.
|
|
|
|
17.02.2011, 11:51
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 28.02.2010
Сообщений: 2,294
Сказал спасибо: 52
Сказали Спасибо 460 раз(а) в 391 сообщении(ях)
|
Re: Разложить число на символы ASCII
7Fantomas7 Ну ёлки палки - табличку сделай- место есть в памяти? и просто индексами... это-ж всё сто лет пройдено. sym_new[0] =sym_new_new[sym_out1[0]].
|
|
|
|
17.02.2011, 13:33
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 24.09.2007
Сообщений: 1,437
Сказал спасибо: 287
Сказали Спасибо 339 раз(а) в 202 сообщении(ях)
|
Re: Разложить число на символы ASCII
OlegNZH,
Та ну елки с палками сделал я табличку давным давно и в памяти места еще хватит бронепоезд развернуть. И функция готова.
И два масива есть и задача стоит чтоб в любом месте общей програмы писать в эти масивы адреса ASCII хоть от символьных значений хоть числовых, но в любом случае адреса. Писать адреса того что необходимо вывести, ну я не знаю как еще объяснить. Замерил я АЦП, отфильтровал, записал в масив значение, обновил динамичку, увидел значени. Нажал кнопку, получил событие, записал адреса в масив например если чтото нажалось то в масив записалось Err, адресами ASCII записалось, ну есть разница пишем Err получаем набор из 3х hex-ов. А таблички и вывод уже есть.
Последний раз редактировалось 7Fantomas7; 17.02.2011 в 13:39.
|
|
|
|
17.02.2011, 13:45
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 13.12.2004
Сообщений: 3,168
Сказал спасибо: 11
Сказали Спасибо 691 раз(а) в 503 сообщении(ях)
|
Re: Разложить число на символы ASCII
Сообщение от 7Fantomas7
|
|
Просто нужно то всего 3 разряда или 3 символа и больше не будет и не планируется. Это банально динамическая индикация на 3 разрядный семисегментник и точность великая не нужна хотя и хорошо было бы если б округлять как положено в математике но только без лишних плясок с бубном.
|
Тогда sprintf это неоправданное излишество. Преобразовать в десятичную строку можно примерно так:
|
Код:
|
void Convert(char *OutBuf, float Data)
{
unsigned int DataInt = (unsigned int)(Data + 0.5);
*(OutBuf+2) = (DataInt % 10)+ '0';
DataInt = DataInt / 10;
*(OutBuf+1) = (DataInt % 10)+ '0';
*OutBuf = (DataInt / 10) + '0';
} |
+'0' для получения ASCII, но вообще это нафиг не нужно для семисегментника. Держать полный знакогенератор для индикатора с очень ограниченными возможностями индикации расточительство.
Использовать:
|
Код:
|
float fvar;
char Buf[3];
int main(void)
{
....
fvar = 123.65;
Convert(Buf,fvar);
...
} |
В Buf будет 124 в ASCII. Если fvar присвоить 1.75, то выведется 002
|
|
|
|
17.02.2011, 14:07
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 28.02.2010
Сообщений: 2,294
Сказал спасибо: 52
Сказали Спасибо 460 раз(а) в 391 сообщении(ях)
|
Re: Разложить число на символы ASCII
Сообщение от kison
|
|
Тогда sprintf это неоправданное излишество. Преобразовать в десятичную строку можно примерно так:
|
Угу.... как только sprintf врубаешь- сразу код настолько возрастает- мама не горюй!Всё проще должно быть.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 12:15.
|
|