读回一个浮点数

时间:2014-03-24 09:25:19

标签: c casting eeprom c18

我正在使用微芯片c18,我有这个功能,它将浮动分成4个相应的字节。而C18遵循小的结束

a[0]=*(fptr);        address 0
a[1]=*(fptr+1);              1  
a[2]=*(fptr+2);              2    
a[3]=*(fptr+3);              3 

并写入序列eeprom。

如果我想读回浮点变量。

float read_float(void)
{   float f;
    unsigned char *fptr;
    fptr=&f;

    *(fptr)=eepromread(0);
    *(fptr+1)=eepromread(1);
    *(fptr+2)=eepromread(2);
    *(fptr+3)=eepromread(3);      

    return(f);       
}

这个函数会返回float变量吗? 我现在没有任何硬件和模拟工具。

我相信我清楚我的问题。 编辑:

这样做。将char分配给float时发生编译器不匹配错误。如何删除错误?

1 个答案:

答案 0 :(得分:1)

最干净的方式是*(char*)(fptr+) = eepromread();。您希望从初始指针偏移,转换为指向字符的指针,取消引用。

另外,至少我的编译器(gcc)在第一次分配时很糟糕。你需要更像fptr = (char*)(&f);的东西,以便浮点指针与赋值兼容。

仔细检查,确保eepromread()按照您期望的顺序为您提供字节。他们应该,因为IEEE754独立于字节排序,但隐藏在嵌入式C库中的“聪明的增强”的数量可能会填补一本相当大的书。