16进制转float数

lovetsfuer 2011-11-04 09:50:56
遇到一个问题,ModbusRTU协议的仪表,返回数据是4字节的16进制,返回数据已经取过来了
数据是:80 00 00 00,数据位是float数,怎么把16进制数据转换位float数
没有搜索到怎么处理,请教谁知道的给说说
...全文
498 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
缘中人 2012-08-16
  • 打赏
  • 举报
回复
是不一样的
咖啡骑士 2012-08-16
  • 打赏
  • 举报
回复
union a
{
float f;
unsigned char ch[4];
}temp;

temp.ch[4] = {0x80, 0x00, 0x00, 0x00};
cout<<temp.f;

temp.f就是你要的float数了
wangcftxz 2011-11-11
  • 打赏
  • 举报
回复
int HtoD(AnsiString Order1)//自定义函数十六进制转成十进制
{
char *endptr;
short int lAny;
lAny = strtol(Order1.c_str(),&endptr,16);
lAny = StrToInt(FormatFloat("#00",lAny));
return lAny;
}
void __fastcall TForm1::Button3Click(TObject *Sender)
{
float fx;
unsigned char *px;
unsigned char x[4];
void *pf;
//Edit6 ~ Edit9 放 float对应的十六进制数
x[0]=(unsigned char)HtoD(Edit6->Text);
x[1]=(unsigned char)HtoD(Edit7->Text);
x[2]=(unsigned char)HtoD(Edit8->Text);
x[3]=(unsigned char)HtoD(Edit9->Text);
px=x;
pf=&fx;
for(int i=0;i<4;i++) *((char*)pf+i)=*(px+i);
//转换后的32bit整数
Edit1->Text=FloatToStr(fx);
}
ccrun.com 2011-11-05
  • 打赏
  • 举报
回复
byte bt[] = { 0x80, 0x0, 0x0, 0x0 };
float b = *(float *)bt;
zzbinfo 2011-11-05
  • 打赏
  • 举报
回复
直接赋给一个float变量就行了.不管是什么类型的变量,在计算机看来都是二进制的数据.
lhy 2011-11-04
  • 打赏
  • 举报
回复
查找好大小端直接赋值

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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