4426|4

79

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

Keil里如何用C将三字节数据转换为浮点型 [复制链接]

有三个十六进制数据为0x03,0xDF,0xE5,我把它们放在一个ph[3]的uchar型数组里,想编程得到float型的ph值,以下是转换原理:
0               1               2
0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
- + E E E E E E s s s s s s s s s s s s s s s s

0 0 0 0 0 0 1 1                                      (03)
                1 1 0 1 1 1 1 1 1 1 0 0 1 1 1 1      (DF CF)


第一位 (-) 是这个数的符号,0为正,
第二位(+) 是指数的符号,
EEEEEE 是指数,
ss...s 是小数部分. (+前缀变为 0.sssssssssssssssss)

例如:
03 DF CF = (+)0.1101111111001111 * 2^( +000011 ) = 0.8742523193359375 *2^3 = 6.99
我自己写的程序是:(编译有错误)
#include
#include
#include
#include
#include
#define uchar unsigned char
#define uint unsigned int
uchar ph[3]={0x03,0xDF,0xE5};
float x;
uchar i;
float ToSingle( );

void main(void)
{
     x = ToSingle(ph,0);
}

float ToSingle(value, startIndex)
uchar value [3];
uint startIndex;
{     
             uchar j;
             double t = 0;                          
             double s = 0.5;
             uchar b = value[startIndex + 1];
             for (j = 0; j < 8; j++)
            {
                if ((b & 0x80) != 0) t += s;
                b <<= 1;
                s /= 2;
            }
            b = value[startIndex + 2];
            for (j= 0; j < 8; j++)
            {
                if ((b & 0x80) != 0) t += s;
                b <<= 1;
                s /= 2;
            }
            b = value[startIndex];
                       
            return (float)(t * Pow(2, 3) * sign0);

}
我第一次用KeilC编,希望大家帮帮忙,指点指点,小妹在此谢过了!!

最新回复

先按4字节组织,再copy到一个float区域。  详情 回复 发表于 2008-6-20 14:12
点赞 关注

回复
举报

73

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
还有,转换以后的float数据怎样变为uchar[]数组丫?
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
sign0是个什么东东?哪里定义了?

编译错误是什么?

ps:你的程序只能用来写和看,肯定无法在实际的单片机上正确运行,因为main()里面没有对单片机进行相应的初始化。
 
 
 

回复

57

帖子

0

TA的资源

一粒金砂(初级)

4
 
单片机对实数和指数处理很麻烦,建议楼主去看看单片机资料看他怎么吧数据和指数存放的。我是指 怎样转换为01代码的
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

5
 
先按4字节组织,再copy到一个float区域。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表