首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

16进制转float数解决办法

2013-01-08 
16进制转float数遇到一个问题,ModbusRTU协议的仪表,返回数据是4字节的16进制,返回数据已经取过来了数据是:

16进制转float数
遇到一个问题,ModbusRTU协议的仪表,返回数据是4字节的16进制,返回数据已经取过来了
数据是:80 00 00 00,数据位是float数,怎么把16进制数据转换位float数
没有搜索到怎么处理,请教谁知道的给说说
[解决办法]

byte bt[] = { 0x80, 0x0, 0x0, 0x0 };
float b = *(float *)bt;

[解决办法]
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);
}

热点排行