小弟使用中断方式从Atmega128的串口1读取了包含13个字节的数据,其中部分数据是浮点数,在接收的时候浮点数是作为四个字节的字符数组保存的。比如:
从端口接收到的四个构成一个完整浮点数的字符分别是:
0xFC, 0x34,0xCD, 0xB1.
现在我希望将这四个字符还原成正确的浮点数,应该如何处理,望各位高手指点迷津。
(原来接收数据都是以字节为单位接收的,是否有更好的方法处理这个问题呢,如何处理呢,望朋友不吝赐教^_^)
注:
[code=C/C++]
struct send_data{
unsigned char flag; //数据头标记,默认为0x55
unsigned char len; //数据长度
unsigned char gain; //AD的当前增益
float vol; //当前AD所采到的值
float offset; //当前位置值
unsigned int crc; //CRC校验数据
};
typedef struct send_data AD_MCU;
AD_MCU *getADdata(unsigned char *string)
{
unsigned char i = 0;
unsigned char j = 0;
AD_MCU ADsentdata;
unsigned char flagTemp;
unsigned char lengthTemp;
unsigned char floatArray[4];
float floatTemp;
float pressureTemp = 0;
float sinkTemp = 0;
unsigned int crcTemp;
ADsentdata.flag = string[i++];
ADsentdata.len = string[i++];
ADsentdata.gain = string[i++];
for(j = 0; j < 4; j++)
{
floatArray[j] = string[i++];
}
floatTemp = (float)floatArray[0];
if(floatTemp&0x10000000)floatTemp = floatTemp & 0x000000FF;
pressureTemp = floatTemp;
pressureTemp = pressureTemp < < 8;
floatTemp = (float)floatArray[1];
if(floatTemp&0x10000000)floatTemp = floatTemp & 0x000000FF;
pressureTemp += floatTemp;
pressureTemp = pressureTemp < < 8;
floatTemp = (float)floatArray[2];
if(floatTemp&0x10000000)floatTemp = floatTemp & 0x000000FF;
pressureTemp += floatTemp;
pressureTemp = pressureTemp < < 8;
floatTemp = (float)floatArray[3];
if(floatTemp&0x10000000)floatTemp = floatTemp & 0x000000FF;
pressureTemp += floatTemp;
pressureTemp = pressureTemp < < 8;
……
}
[/code]
小弟本来准备通过直接的数据变换和位运算达到目的,但是最后编译提示的错误是:
< < 操作符有非法类型‘float' 和‘int'
&操作符有非法类型‘float' and ‘long int'