c - 读回 float

标签 c casting eeprom mplab-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);       
}

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

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

在这样做的同时。将 char 分配给 float 时发生编译器不匹配错误。我如何消除该错误?

最佳答案

最简洁的方法是*(char*)(fptr+i) = eepromread(i);。您需要将初始指针的偏移量转换为指向字符的指针,并取消引用。

此外,至少我的编译器(gcc)对第一个赋值犹豫不决。您需要类似于 fptr = (char*)(&f); 的内容,以便指向 float 的指针与赋值兼容。

不过,请仔细检查,以确保 eepromread() 按您期望的顺序提供字节。它们应该如此,因为 IEEE754 独立于字节排序,但隐藏在嵌入式 C 库中的“巧妙增强”的数量可以写满一本相当大的书。

关于c - 读回 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22605366/

相关文章:

c++ - C++中的隐式转换

memory - 在 Arduino 的 EEPROM 中读取和写入结构

linux - 在 linux 上读写 spi eeprom

c - 如何在后台运行函数?

c - printf() : When is %n written?

c - 为使用 ltrace/strace 运行的可执行文件提供命令行参数

c++ - 为什么 static_cast 不使用转换运算符指向 const 的指针?

c - 估算微 Controller 的计算预算 (Arduino)

c - 什么时候允许类型转换指针?

configuration - 小型嵌入式设备的EEPROM参数结构