C语言学艺未精,请教个简单的问题

[复制链接]
3133|12
 楼主| zusen 发表于 2008-4-8 17:02 | 显示全部楼层 |阅读模式
问个简单的C问题
如果将 float 类型的数据写入EEPROM???
因为用I2C写EEPROM时,是以字节来写的(unsigned char)
如果强制将 float类型转为int的话,他后面的小数点就四舍五入了
如何将这个float类型的数据写入EEPROM呢????

3Q~~~~~~~~
古道热肠 发表于 2008-4-8 17:07 | 显示全部楼层

看编译软件规定的符点数占几个字节

再用字符指针强制转换,不就解决了吧。
computer00 发表于 2008-4-8 17:12 | 显示全部楼层

恩。通常浮点数用4字节,强制转换为char型指针

float f;

EepromWrite(((unsigned char *)&f)[0]);
EepromWrite(((unsigned char *)&f)[1]);
EepromWrite(((unsigned char *)&f)[2]);
EepromWrite(((unsigned char *)&f)[3]);

读的时候刚好倒过来就行了。
 楼主| zusen 发表于 2008-4-8 17:14 | 显示全部楼层

哦,这样也行,先谢两位,试试先

平常人 发表于 2008-4-8 20:30 | 显示全部楼层

最好用sizeof决定需要转存变量所占的字节数目

接3楼圈圈的回答:

float f;
int byte;

for (byte=0; byte<sizeof(f); byte++)
   EepromWrite(((unsigned char *)&f)[byte]);

这样可以不考虑变量f的长度,可以在不同系统间移植,当然要注意大小端的问题。
ccxlslr 发表于 2008-4-8 20:48 | 显示全部楼层

呵呵,用union结构!

computer00 发表于 2008-4-9 01:46 | 显示全部楼层

如果楼主只在同一个系统下写入和读出的话,可以不用管大

hqgboy 发表于 2008-4-9 08:41 | 显示全部楼层

联合最简单...

hqgboy 发表于 2008-4-9 08:42 | 显示全部楼层

...........

union
{
    float             f;
    unsigned char   c;
    unsigned short  i;     
}iic_data_buf;


while(I2C_ReadNByte(CAT1025, TWO_BYTE_SUBA,I2C_ADDR,(unsigned char *)&iic_data_buf.f, 4)==0){}
computer00 发表于 2008-4-9 12:58 | 显示全部楼层

我觉得联合还麻烦,还要单独建立一种数据类型

直接操作更方便,反正都是指针,何必呢……

I2C_ReadNByte(CAT1025, TWO_BYTE_SUBA,I2C_ADDR,(unsigned char *)&f, 4)
hqgboy 发表于 2008-4-9 13:02 | 显示全部楼层

呵呵.有联合也可以处理int....char

computer00 发表于 2008-4-9 13:07 | 显示全部楼层

没有联合也照样可以处理int...char……

zgl7903 发表于 2008-4-9 18:17 | 显示全部楼层

把指针参数写成void*型比较好,可以省去类型转换


I2C_ReadNByte(CAT1025, TWO_BYTE_SUBA,I2C_ADDR,&f, sizeof(double))
您需要登录后才可以回帖 登录 | 注册

本版积分规则

233

主题

3192

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部