常见的是float4字节,double8字节
浮点数的标准可以参看IEEE二进制浮点数算术标准(ANSI/IEEE Std 754-1985),简单的说就是把连续的几个字节分成两段,前面一段表示有效数字,后面一段表示2的几次方

解决方案 »

  1.   

    http://blog.csdn.net/todd911/article/details/14224249
      

  2.   

    上下位机应该用统一的数据结构,上位机结构:struct ComData
    {
      UINT32 m_nStart;  //开始标识
      float m_fData[512];  // 数据体,2048字节
      UINT32 m_nEnd;  //结束标识
    } m_data;读数据时直接读到&m_data中,而不是Byte rxdata[2048]。用m_fData画线就行。
    注意几点:
    1. 以上只是个例子,结构内容根据实际情况自己定。
    2. 下位机要定一个类似的结构,以满足协议要求。不同的下位机开发环境语法略有差异。
    3. 如果是低端单片机(像C51等),没有浮点处理能力,用软件模拟很慢,最好用整形数传送,我们一般用实际温度x100表示,提高效率。上位机用整形数画图也快一些,显示时除以100变成浮点数。
    4. 整个过程不用特意解析浮点数结构。当然了解一下可以扩展知识面。
      

  3.   

    http://bbs.csdn.net/topics/390676437
      

  4.   

    自定义函数来解决
    #define MLIMIT  2048 //缓冲数据2048个字节,超过为越界
    Byte    rxdata[2048];float   GetReal(char *buf,long off,BOO type)
    {
           if((off+4)>MLIMIT) 
               return 0.0;
           union 
           {
                   char  c[4];
                   float   val;
           }x;
           if(type)                 //之所以要加这个判断,是有的下位和电脑高低位相反,比如西门子PLC
           {
              x.c[0]=*(buf+off+3); 
              x.c[1]=*(buf+off+2);
              x.c[2]=*(buf+off+1);
              x.c[3]=*(buf+off+0); //加0可以不要,只是让你明白
           }
           else
           {
              x.c[0]=*(buf+off+0);  //加0可以不要,只是让你明白
              x.c[1]=*(buf+off+1);
              x.c[2]=*(buf+off+2);
              x.c[3]=*(buf+off+3);
           }
           return x.val;
    }应用:比如接受到第102个字节开始的数据表示压力p0001
    float   p001=GetReal(rxdata,102,true)
      

  5.   

    你可以再写几个
    long    GetDword(...)
    short   GetWord(...)
    char    GetByte()
    time    GetTime()
    long    GetCount()
    等等等等
      

  6.   

    一般不同的机子之间通讯用char   29.48 一般直接传递“29.48”不要把它翻译成浮点型的数据