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

 
 
 
Reply to this topicStart new topic
> Как преобразовать double в char?, компилятор picc-18
Marser
сообщение Nov 25 2010, 14:03
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 162
Регистрация: 12-09-08
Из: Казань
Пользователь №: 40 143



Здравствуйте, коллеги!
Программирую микроконтроллер pic18f4520 на С с использованием компилятора ht picc-18.
Подскажите пожалуйста, какой командой можно преобразовать переменную типа double в массив типа char?
Спасибо.
Go to the top of the page
 
+Quote Post
arttab
сообщение Nov 26 2010, 02:50
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 432
Регистрация: 7-12-04
Из: Новосибирск
Пользователь №: 1 371



принцип такой:
txd_buf[0]=(char) (ADCval>>8);
txd_buf[1]=(char) (ADCval&0x00FF);

это shot в char, но принцип, думаю, понятен


--------------------
OrCAD, Altium,IAR, AVR....
Go to the top of the page
 
+Quote Post
Demeny
сообщение Nov 26 2010, 06:49
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 648
Регистрация: 11-02-06
Из: Санкт-Петербург
Пользователь №: 14 237



Цитата(Marser @ Nov 25 2010, 17:03) *
Здравствуйте, коллеги!
Программирую микроконтроллер pic18f4520 на С с использованием компилятора ht picc-18.
Подскажите пожалуйста, какой командой можно преобразовать переменную типа double в массив типа char?
Спасибо.

Вопрос неоднозначный - непонятна цель сего преобразования. Если нужно просто получить 8 байт (хотя и непонятно зачем), входящих в состав переменной типа double, тогда так:
Код
double d;
char* d_bytes;
.....................
d_bytes = (char*) &d;
printf("First 3 bytes in double : %X %X %X \r\n", d_bytes[0], d_bytes[1], d_bytes[2]);

Но скорее всего ТС имел в виду получить текстовое представление числа double. Тогда так:
Код
double d;
char d_bytes[32];
..........................
sprintf(d_bytes, "%f", d);


--------------------
Сделано в Китае. Упаковано в России.
Go to the top of the page
 
+Quote Post
Marser
сообщение Nov 26 2010, 08:47
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 162
Регистрация: 12-09-08
Из: Казань
Пользователь №: 40 143



Благодарю. Появилась другая проблема:
Переменные типа double неадекватно себя ведут.
Вот код:

double d;
char s;

d=5;
s=d;

indicate(s);
По команде indicate(s); на экранчике отображается нуль, а не 5. Так же с пременными типа double не работает операция % (остаток от деления). Кто нибудь знает, почему контроллер неправильно работает с переменной типа double?
Спасибо.
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Nov 26 2010, 09:01
Сообщение #5


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(Marser @ Nov 26 2010, 11:47) *
Благодарю. Появилась другая проблема:

И я даже знаю какая - непрочтенный Керниган и Ритчи второй редакции. maniac.gif
Go to the top of the page
 
+Quote Post
Marser
сообщение Nov 26 2010, 09:07
Сообщение #6


Частый гость
**

Группа: Участник
Сообщений: 162
Регистрация: 12-09-08
Из: Казань
Пользователь №: 40 143



Цитата(_Pasha @ Nov 26 2010, 12:01) *
И я даже знаю какая - непрочтенный Керниган и Ритчи второй редакции. maniac.gif

Уже читаю.
Go to the top of the page
 
+Quote Post
Danis
сообщение Nov 27 2010, 13:26
Сообщение #7


Twilight Zone
***

Группа: Свой
Сообщений: 454
Регистрация: 17-02-09
Из: Челябинск
Пользователь №: 44 990



Цитата(_Pasha @ Nov 26 2010, 12:01) *
И я даже знаю какая - непрочтенный Керниган и Ритчи второй редакции. maniac.gif


Зачем так пинать?

Marser, % - остаток целочисленного деления, и применяется с целочисленным переменным, типа char, short, int, long. Но никак не к double и float.


--------------------
Magic Friend
Go to the top of the page
 
+Quote Post
inki-sasha
сообщение Jan 24 2011, 10:09
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 32
Регистрация: 15-06-07
Из: Змиев
Пользователь №: 28 457



Цитата(Marser @ Nov 26 2010, 12:47) *
Благодарю. Появилась другая проблема:
Переменные типа double неадекватно себя ведут.
Вот код:

double d;
char s;

d=5;
s=d;

indicate(s);
По команде indicate(s); на экранчике отображается нуль, а не 5. Так же с пременными типа double не работает операция % (остаток от деления). Кто нибудь знает, почему контроллер неправильно работает с переменной типа double?
Спасибо.


Попробуй написать так:
d=5.0;
s=(char)d;
Go to the top of the page
 
+Quote Post

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

 


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


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