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

 
 
 
Reply to this topicStart new topic
> float -- чушь налицо
Vladimir Prokofi...
сообщение Aug 1 2011, 13:41
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 47
Регистрация: 9-03-11
Пользователь №: 63 481



Непонимаю почему так, поясните пожалуйста.




CODE
typedef union
{
float f;
unsigned char a [sizeof (float)];
} bd_float;

unsigned char UART0_SendFloat( float f ){
unsigned char tmp;
bd_float valueToSend;

valueToSend.f = f;

for( i = 0 ; i < 4; i++ ){
tmp = valueToSend.a[i];
UART0_SendChar( tmp );
}
return 0;
}



Ставлю точку остановки на цикл, и вижу что это float представляется как

valueToSend = {
f = 40
a = { 0x00, 0x00, 0x40, 0x42 }
}
valueToSend = {
f = -352
a = { 0x00, 0x00, 0xB0, 0xC3 }
}

Почему у него такое странное представление? Пробовал через указатель на массив из 4х символов -- два первых байта все равно пусты. Естественно, когда я это склейваю на приемнике получаются совсем не эти числа...
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Aug 1 2011, 13:55
Сообщение #2


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата(Vladimir Prokofiev @ Aug 1 2011, 18:41) *
Почему у него такое странное представление?

Что конкретно не так? Вы в отладчике видите склейку из этих 4х байт в обратном порядке, типа DWORD-а.

Вполне стандартная кодировка little endian.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
rezident
сообщение Aug 1 2011, 13:55
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Никакой чуши нет.
40.0f = 0x42200000
-352.0f = 0xC3B00000
Хотя у вас не указан тип кристалла, но подозреваю, что он 32-х разрядный и представление данных в нем little endian. Выберите в настройках проекта представление данных big endian, если хотите получить байты в том же порядке, какой выдает IEEE-754 Convertor.
Go to the top of the page
 
+Quote Post
Vladimir Prokofi...
сообщение Aug 1 2011, 13:57
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 47
Регистрация: 9-03-11
Пользователь №: 63 481



Цитата(rezident @ Aug 1 2011, 17:55) *
Никакой чуши нет.
40.0f = 0x42200000
-352.0f = 0xC3B00000
Хотя у вас не указан тип кристалла, но подозреваю, что он 32-х разрядный и представление данных в нем little endian. Выберите в настройках проекта представление данных big endian, если хотите получить байты в том же порядке, какой выдает IEEE-754 Convertor.

Понял спасибо) Был неправ
Go to the top of the page
 
+Quote Post

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

 


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


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