armok 发表于 2004-10-17 14:25:26

Jacky 发表于 2004-10-25 14:43:21

可以这样试试,不过是在KEILC51里运行的代码,用到ICC中可能需要修改。

三、将浮点数转化为字符数组



笔者在编制应用程序时有这样的要求:将运算的结果(浮点数)存入EEPROM中。我们知道,浮点数在C语言中是以IEEE格式存储的,一个浮点数占用四个字节,例如浮点数34.526存为(160,26,10,66)这四个数。要将一个浮点数存入EEPROM,实际上就是要存这四个数。那么如何在程序中得到一个浮点数的组成数呢?



浮点数在存储时,是存储连续的字节中的,只要设法找到存储位置,就可以得到这些数了。可以定义一个void的指针,将此指针指向需要存储的浮点数,然后将此指针强制转化为char型,这样,利用指针就可以得到组成该浮点数的各个字节的值了。具体程序如下:



#define uchar unsigned char#define uint unsigned intvoid FtoC(void)



{ float a;



uchar i,*px



uchar x; /*定义字符数组,准备存储浮点数的四个字节*、



void *pf;



px=x; /*px指针指向数组x*/



pf=&a; /*void 型指针指向浮点数首地址*/



a=34.526;



for(i=0;i<4;i++)



{ *(px+i)=*((char *)pf+i); /*强制void 型指针转成char型,因为*/



} /*void型指针不能运算*/



}



如果已将数存入EEPROM,要将其取出合并,方法也是一样,可参考下面的程序。



#define uchar unsigned char#define uint unsigned int



void CtoF(void)



{ float a;



uchar i,*px



uchar x={56,180,150,73};



void *pf;



px=x;



pf=&a;



for(i=0;i<4;i++)



{ *((char *)pf+i)=*(px+i);



}



}

liumc 发表于 2004-12-9 16:22:45

我在前几天的帖子里也有一这样的文章,实现的方法我感觉比你的好一些,我的帖子是转自ICCAVR的新闻组,你可以去看看。

Jacky 发表于 2004-12-9 17:12:40

谢谢芒果派,你的帖子我已经收藏了,你的程序比上面可读性要好一些。


-----此内容被Jacky于2004-12-09,17:15:24编辑过

wsmcjm 发表于 2004-12-9 18:56:06

方法看过了,容易懂.

ICCAVR的新闻组?可以提供详细一点的地址吗?
-----此内容被wsmcjm于2004-12-09,18:57:45编辑过

weilight2008 发表于 2009-4-1 09:36:02

mark。。。。。。。。。

sunyouyuan 发表于 2009-4-1 09:40:51

网上类似的很多

ba_wang_mao 发表于 2009-4-1 09:47:44

armok 阿莫
你什么时候也关心起技术了呢?

xyz2008 发表于 2009-4-1 10:11:36

mark

Yan_Garuruga 发表于 2010-9-9 11:48:50

mark

ye_song 发表于 2011-9-7 19:44:54

mark

dongfo 发表于 2012-5-4 22:07:13

mark一下

dog 发表于 2015-10-28 03:24:02

说明你还在写代码!{:biggrin:}
页: [1]
查看完整版本: 提供一段我在网上找的: 浮点数不用sprintf转换成 ascii 的C代码