求助!!!!!数据解析问题!!!!!高人请进!

dongfatter 2005-04-04 05:02:10
下面所述如何用c来实现,求助大侠帮忙!!!
43 71 73 88(16进制)(从电表采集到的数据,要求转化为float、double型数据)
下面为转化的规则
化为二进制为:
43 71 73 88(16进制)
0,100 0011 0,111 0001 0111 0011 1000 1000
上面一串分为3部分(逗号隔开)
符号: 0
指数: 10000110
尾数(不包括暗示位): 111 0001 0111 0011 1000 1000
加上暗示位后为:1.111 0001 0111 0011 1000 1000
转换成十进制后
指数:134(10000110)减去127为134-127=7
尾数:
1.111 0001 0111 0011 1000 1000向右移动指数位(7位)变为1111 0001 . 0111 0011 1000 1000
整数部分:241(1111 0001)
小数部分:29576(0111 0011 1000 1000)然后除以2的16次方29576/65536=0.45129
结果为241.45129。
...全文
166 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
dongfatter 2005-04-05
  • 打赏
  • 举报
回复
感谢大家
不好意思昨天被老板叫去做苦力
没回大家贴 我马上看 就结贴
拜谢!!!
du51 2005-04-04
  • 打赏
  • 举报
回复
#include<iostream>
using namespace std;
int main()
{
int f;
cout<<"请输入你的数据"<<endl;
cin>>hex>>f;
float *x;
x=(float*)&f;
cout.precision(8);
cout<<*x<<endl;
system("PAUSE");
return 0;
}
du51 2005-04-04
  • 打赏
  • 举报
回复
#include<iostream>
using namespace std;
int main()
{
int f=0x43717388;
float *x;
x=(float*)&f;
cout<<*x<<endl;
system("PAUSE");
return 0;
}
kobefly 2005-04-04
  • 打赏
  • 举报
回复
其实
楼主你所说的这些步骤就是IEEE754对float型数据的标准解析方式

所以
你只要将16进制字符串2进制字符串,然后用bitset,然实现
bitset<32> flo("01000011011100010111001110001000");

float c;
memcpy(&c, &flo,32);

cout<<c;

或者将这8位十六进制的数,转成对应的整数

将其强制类型转化为float
也可以读出正确的结果
kozzii 2005-04-04
  • 打赏
  • 举报
回复
int a,b,c,d,t;
cin>>hex>>a>>b>>c>>d;

a<<=24;b<<=16;c<<=8;
t=a+b+c+d;

float* p=(float*)&t;

cout<<dec<<*p<<endl;
ckc 2005-04-04
  • 打赏
  • 举报
回复
注意intel cpu的字节顺序
有可能要把从电表传来的4字节数据掉个个
ckc 2005-04-04
  • 打赏
  • 举报
回复
char c[]="\x88\x73\x71\x43";
float f;
memcpy(&f,c,4);
printf("%f\n",f);
rocketliu8899 2005-04-04
  • 打赏
  • 举报
回复
关注中。。。。。。。。。。。。。
MagicCarmack 2005-04-04
  • 打赏
  • 举报
回复
我也搞不懂,只能帮你顶
dongfatter 2005-04-04
  • 打赏
  • 举报
回复
高人怎么还不来呀
救命啊:(
MagicCarmack 2005-04-04
  • 打赏
  • 举报
回复
关注中。。。。。。。。。。。。。
MagicCarmack 2005-04-04
  • 打赏
  • 举报
回复
UP

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧