Один из способов сделать это - использовать объединение, как показано в приведенном ниже примере кода.Имейте в виду, что это будет работать только в том случае, если компьютеры на обеих сторонах последовательного соединения используют один и тот же формат с плавающей запятой и один и тот же порядковый номер.Если это не так, вам нужно будет добавить дополнительную логику перевода для обработки этих различий.
#include <stdio.h>
union Foo
{
unsigned short asShorts[2];
float asFloat;
};
int main(int, char * *)
{
// Convert a float into two shots
Foo foo;
foo.asFloat = 3.14159f;
printf("For float value %f, the shorts are %u and %u\n", foo.asFloat, foo.asShorts[0], foo.asShorts[1]);
// [... send the two asShorts values across the serial port here...]
// Imagine this is the receiving-side code (after having received the two shorts)
const unsigned short s1 = foo.asShorts[0];
const unsigned short s2 = foo.asShorts[1];
// Convert the two shorts back into a float
Foo bar;
bar.asShorts[0] = s1;
bar.asShorts[1] = s2;
printf("For shorts %u and %u, the float value is %f\n", s1, s2, bar.asFloat);
return 0;
}
... кстати, если вы предпочитаете отправлять / получать байты, а не шорты, вы можетевместо этого измените объединение так:
union Foo
{
unsigned char asBytes[4];
float asFloat;
};