Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Передать float из МК в Visual Studio
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
smk
Здравствуйте!
В контроллере (STM32F407) раскладываю float в массив:
Код
void float_to_buf_tx (float data)
{
    tempBuf[3]= ((unsigned char*)&(data))[3];
    tempBuf[2]= ((unsigned char*)&(data))[2];
    tempBuf[1]= ((unsigned char*)&(data))[1];
    tempBuf[0]= ((unsigned char*)&(data))[0];
}

Далее массив отправляется в приложение, изготовленное с помошью Visual Studio 2010.
Пытаю собрать float обратно:
Код
temp = Convert.ToSingle((mydata[3] << 24) + (mydata[2] << 16) + (mydata[1] << 8) + mydata[0]);
            label55.Text = Convert.ToString(temp);

В итоге получается не то число, что должно быть. Понятно что что-то делаю неправильно. Вот хочу спросить как правильно? Спасибо.
_pv
точно так же как и отправляли,
float a;
((unsigned char *)&a)[0] = mydata[0];
((unsigned char *)&a)[1] = mydata[1];
((unsigned char *)&a)[2] = mydata[2];
((unsigned char *)&a)[3] = mydata[3];

ну или даже memcpy(&a, mydata, 4);

но вообще для этого есть union.
demiurg_spb
Используйте union
Flexz
Судя по приведенному куску кода это C#, тогда
BitConverter.ToSingle(mydata, 0);
smk
Цитата(_pv @ Feb 27 2018, 12:40) *
точно так же как и отправляли,
float a;
((unsigned char *)&a)[0] = mydata[0];
((unsigned char *)&a)[1] = mydata[1];
((unsigned char *)&a)[2] = mydata[2];
((unsigned char *)&a)[3] = mydata[3];

ну или даже memcpy(&a, mydata, 4);

но вообще для этого есть union.

На это ругается, что небезопасный код.


Цитата(Flexz @ Feb 27 2018, 12:47) *
Судя по приведенному куску кода это C#, тогда
BitConverter.ToSingle(mydata, 0);

Спасибо! Это работает!
Unfog
del
Arlleex
Цитата(Unfog @ Mar 1 2018, 10:26) *
А не то число у вас получалось из-за неверного порядка байт:
tempBuf[3]= ((unsigned char*)&(data))[3]; - это младший байт, а в Convert вы передавали как старший.
Google => little-endian

К Вашему сведению: в формате Little-Endian младший байт располагается по младшему адресу, старшее - по старшему.
Unfog
Да, прошу прощения, у меня ошибка.
Не обратил внимание, что индексы в tempBuf указаны с 3 по 0.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.