从串口读取二进制数据,格式已经告知,
比如说第五个字节到第八个字节(共四个字节)存放的是一个float变量,
请问怎么提取出来阿?
我试了几种方法都不对。:(另外,从串口读取数据,高位在前还是低位在前?
谢谢了!!
//bow

解决方案 »

  1.   

    读出来之后先放到缓存中,然后强制转化不就行了吗
    float *p = ( float * )buf;
    printf( "%f", *p );
    串口中的数据与网络上的字节序有近似,这和串口接什么设备有关呀
      

  2.   

    union myunion
    {
      float a;
      BYTE b[8];
    };
    CString str;
    int i;
    BYTE a[8];  //从串口读的一个字节
    myunion test;
    for(i=0; i<8; i++)
       test.b[i]=a[i];
    for(i=0; i<4; i++)
       test.b[i]=tes.b[i+4];
    for(i=0; i<4; i++)
       test.b[i+4]=0x00;
    str.Format("%f", test.a);
    用联合,它是共享内存空间的。
      

  3.   

    只要发送的时候保证和接收同样的顺序就可以
    发送:
    char* p=(char*)floatA;
    send(p);
    接收:
    char buffer[128];
    recv(buffer)
    float *p = ( float * )(buffer+5);
    save(*p);
      

  4.   

    你在读数据的时候,必须使用byte类型的缓冲区。
    然后自己再转换数据格式。比较烦琐,但不复杂。
      

  5.   

    上面写错了!!!union myunion
    {
      float a;
      BYTE b[4];
    };
    CString str;
    int i;
    BYTE a[8];  //从串口读的8个字节
    myunion test;
    for(i=0; i<8; i++)
       test.b[i]=a[i+4];  //取5-8四个字节
    str.Format("%f", test.a); 
    这样应该对了吧!!! 
      

  6.   

    读数据的时候,必须使用byte类型的缓冲区么?
    我把他赋给一个CString变量,行么?