Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: float -- чушь налицо
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > IAR
Vladimir Prokofiev
Непонимаю почему так, поясните пожалуйста.




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х символов -- два первых байта все равно пусты. Естественно, когда я это склейваю на приемнике получаются совсем не эти числа...
GetSmart
Цитата(Vladimir Prokofiev @ Aug 1 2011, 18:41) *
Почему у него такое странное представление?

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

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

Понял спасибо) Был неправ
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.