我用api函数开发了一个串口调试程序,现在需要接收并以double形式显示角度,请问如何做,谢谢大家。
输入数据帧格式如下表。
序号 名称 占用字节数目 备注
1 帧头 2 取值:0x5555
2 长度码 1 取值:“方位码”占用的字节长度=2
3 方位码 2 取值范围:0~720;单位:0.5度;
4 CRC码 2 将“长度码”和“方位码”的内容作CRC-16效验
5 帧尾 2 取值:0xAAAA
注:
0x 55 55 02 00 B4 D0 77 AA AA    // 90 度
0x 55 55 02 01 0E 50 54 AA AA    // 135 度
0x 55 55 02 01 69 11 BE AA AA    // 180.5 度
0x 55 55 02 01 6E 50 7C AA AA    // 183 度
0x 55 55 02 01 E0 D0 18 AA AA    // 240 度
0x 55 55 02 01 FB 90 13 AA AA    // 253.5 度
我的代码是
BOOL CCommtestDlg::ProcessCOMMNotification (UINT wParam,long lParam)
{
..............
        CString StrTemp;
BYTE abIn[MAXBLOCK];
int len;
        len=ReadBlock(abIn,MAXBLOCK);    //缓冲区字符长度
        for(int i=0;i <len;i++)
{
BYTE bt=abIn[i];
if(m_ctrlHexDisplay.GetCheck())
StrTemp.Format("%02x ",bt);
else
    StrTemp.Format("%c",bt);
                ??????? 

解决方案 »

  1.   

    这个简单吧,接收到一个unsigned char数组中,强制转换成double就可以了。
      

  2.   

    ( 0x00 * 0x100 + 0xb4 ) / 2 = 90
    ( 0x01 * 0x100 + 0x69 ) / 2 = 180.5
      

  3.   

    问题是提取的方法是什么,用memcpy?求教?
      

  4.   

    BYTE buf[9] = {0x55, 0x55, 0x02, 0x00, 0xb4, 0xd0, 0x77, 0xaa, 0xaa};
    float Angel;
    Angel = (buf[3] * 0x100 + buf[4]) / 2.0;
      

  5.   

    数据是随机的,现在的程序是
    for(int i=0;i<len;i++)
    {
    BYTE bt=abIn[i];
    if(m_ctrlHexDisplay.GetCheck())
    StrTemp.Format("%02x ",bt);
    else
        StrTemp.Format("%c",bt);
    // AcceptRead+=StrTemp;
    m_strRXData+=StrTemp; char ch = (char)bt;
    BYTE buf[9];
    memcpy(buf,abIn+i,9); 
    m_strPortRXData += (char)ch; if( 0x55 == buf[ 0 ] && 0x55 == buf[ 1 ] )
    {
    flag = 1;
    }
    if(0xAA == buf[ 7 ] && 0xAA == buf[ 8 ])
    {
    flag = 2;
    }
    if (flag == 2)
    {
    float Angel;
    Angel = (buf[3] * 0x100 + buf[4])/2;
    m_meter.UpdateNeedle(Angel);
    memset(buf,0,9);
    }
    }
    无法得到想要的数据,请问是怎么回事?谢谢!