реклама на сайте
подробности

 
 
> hex to dec и в массив как сделать, преобразовать число в массив символов
bugor
сообщение Mar 7 2009, 06:08
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 23
Регистрация: 26-02-09
Пользователь №: 45 408



Есть число однобайтное или 2х байтное как его преобразовать в массив в символьном виде чтобы потом это дело вывести на LCD дисплей
например 0131h -это 305 десятичное - нужен массив из допустим mydata[3] со значениями {33, 30, 35}
чтобы можно было каждое значение выкинуть в свое место на экран
пробовал форматированный вывод но ничего не получилось чегото да и обьем огромный просто занимает эта функция. Я в IAR не смог по контексту найти чегото такой функции, может искал неправильно?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 5)
xemul
сообщение Mar 7 2009, 09:41
Сообщение #2



*****

Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731



itou(), ltoa(), ...
Оптимизацию подобных функций стОит поискать по конфе.
Go to the top of the page
 
+Quote Post
Goodefine
сообщение Mar 7 2009, 12:33
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 211
Регистрация: 6-08-07
Из: Приднестровье, Тирасполь
Пользователь №: 29 581



Как вариант:
Код
...
#define BUF_SIZE 4
...
unsigned int value; //число подлежащее выводу на дисплей
unsigned char buffer [BUF_SIZE]; //буфер вывода
...
//функция преобразования

void decbin (unsigned int const* x, unsigned char* buff) {
    unsigned int i;
        for (i=0; i<BUF_SIZE;i++){buff[i]=0;} //зануляем
        for (i=*x; i>=100; i-=100) {buff[0]++;}
        for (i=*x-100*buff[0]; i>=10; i-=10) {buff[1]++;}
        for (i=*x-100*buff[0]-10*buff[1]; i>=1; i-=1) {buff[2]++;}
                //забыл добавить еще:
                for (i=0; i<BUF_SIZE;i++){buff[i]+=0x30;} //в ASCII

                                                          }
...
//использование
...
decbin(&value, buffer);
lcd_gotoxy(0,0);
lcd_puts(buffer); //вывод
...

На тини2313 это дало экономию памяти более чем в два раза по сравнению со sprintf, которая к тому же не хотела работать с тинькой...

Сообщение отредактировал Goodefine - Mar 7 2009, 13:07


--------------------
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
Go to the top of the page
 
+Quote Post
ucMike
сообщение Mar 9 2009, 14:17
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 60
Регистрация: 21-11-08
Пользователь №: 41 832



Вариант
Код
...
#define BUF_SIZE 6  //  5 цифр + 0x00 (конец строки - привычка)
...
unsigned int value; //число подлежащее выводу на дисплей
unsigned char buffer [BUF_SIZE]; //буфер вывода

void XtoS(unsigned int *value, unsigned char *buffer)
{
   unsigned char i;
  unsigned int val;
  val = value;  // Чтоб не тревожить value
   for(i=0; i<BUF_SIZE-1; i++){
       buffer[BUF_SIZE - i - 1] = val % 10; // Остаток от деления
      val  = val / 10;                                // Целочисленное деление
  }
  for(i=0; i<BUF_SIZE-1; i++)  
      buffer[i] = buffer[i] + '0';  // Перейти к ASCII. Это можно делать сразу с взятием остатка
buffer[BUF_SIZE-1] = 0x00; // Привычка ставить ноль в конец строки
}
Go to the top of the page
 
+Quote Post
Goodefine
сообщение Mar 9 2009, 16:34
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 211
Регистрация: 6-08-07
Из: Приднестровье, Тирасполь
Пользователь №: 29 581



Цитата(ucMike @ Mar 9 2009, 17:17) *
Вариант...

В варианте выше деление не использовалось принципиально... Забыл, правда, ноль в конец массива дорисовать...
Цитата(ucMike @ Mar 9 2009, 17:17) *
Код
...
void XtoS(unsigned int *value, unsigned char *buffer)
{
...
  val = value;  // Чтоб не тревожить value
...
}

Так работать не будет...


--------------------
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
Go to the top of the page
 
+Quote Post
ucMike
сообщение Mar 18 2009, 13:51
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 60
Регистрация: 21-11-08
Пользователь №: 41 832



Цитата(Goodefine @ Mar 9 2009, 19:34) *
Так работать не будет...


Вы правы. Должно быть val = *value;

Посыпаю голову пеплом.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th July 2025 - 04:09
Рейтинг@Mail.ru


Страница сгенерированна за 0.01382 секунд с 7
ELECTRONIX ©2004-2016