注册 登录
编程论坛 VC++/MFC

求助:在 MFC 上用 MSComm 控件编写串口程序,并想将接收到的字符转换成十进制,进行计算

雪花儿帅帅 发布于 2014-09-12 15:36, 746 次点击
真心求教:在MFC上用MSComm控件编写串口程序,并想将接收到的字符转换成十进制,进行计算,例如我串口接收到的数据是这样的数据4F 03 4F 03 0C 03 3C 03 5F 07 .............一直接收的是这种数据,现在我想要进行计算公式是:((低字节的十进制数)*256+(高字节的十进制数))/10;其中头两个是高字节4F,4F,0C,......后两个是低字节03,93,03,07.......我刚用MFC对其函数一点也不熟悉,由于工作急需来不及认真学习就要编写这个程序,我现在每天都在恶补知识,现在哪位大神帮忙解决一下,真的十分十分感谢,十二分的感激,下面是我在网友那里借鉴的串口程序,程序能够正常通信,剩下的请各位大神帮帮忙指点指点,多谢多谢!

 
void CSCommTestDlg::OnComm()
{
    // TODO: Add your control notification handler code here
    VARIANT variant_inp;
    COleSafeArray safearray_inp;
    LONG len,k;
    BYTE rxdata[2048];//设置BYTE数组
    CString strtemp;



    if (m_ctrlComm.GetCommEvent()==2)//事件值为2表示接收缓冲区内有字符
    {
        variant_inp=m_ctrlComm.GetInput();//读缓冲区
        safearray_inp=variant_inp;//VARIANT型变量转换为ColeSafeArray型变量
        len=safearray_inp.GetOneDimSize();//得到有效数据长度
        for (k=0;k<len;k++)
            safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组
        for (k=0;k<len;k++)
        {
            //BYTE bt=*(char*)(rxdata+k);//字符型
            //strtemp.Format("%C",bt);//将字符送入临时变量strtemp存放

            BYTE bt=*(int*)(rxdata+k);//整数型
            strtemp.Format("%C",bt);//将字符送入临时变量strtemp存放



   
            m_strEditRXData+=atoi(strtemp);//加入接收编辑框对应字符串
        }
    }
    UpdateData(FALSE);//更新编辑框内容
   
}
3 回复
#2
雪花儿帅帅2014-09-12 15:41
程序是这样的,上边把正确的注释掉了
void CSCommTestDlg::OnComm()
{
    // TODO: Add your control notification handler code here
    VARIANT variant_inp;
    COleSafeArray safearray_inp;
    LONG len,k;
    BYTE rxdata[2048];//设置BYTE数组
    CString strtemp;



    if (m_ctrlComm.GetCommEvent()==2)//事件值为2表示接收缓冲区内有字符
    {
        variant_inp=m_ctrlComm.GetInput();//读缓冲区
        safearray_inp=variant_inp;//VARIANT型变量转换为ColeSafeArray型变量
        len=safearray_inp.GetOneDimSize();//得到有效数据长度
        for (k=0;k<len;k++)
            safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组
        for (k=0;k<len;k++)
        {
            BYTE bt=*(char*)(rxdata+k);//字符型
            strtemp.Format("%C",bt);//将字符送入临时变量strtemp存放

        //    BYTE bt=*(int*)(rxdata+k);//整数型
            //strtemp.Format("%C",bt);//将字符送入临时变量strtemp存放



   
            m_strEditRXData+=atoi(strtemp);//加入接收编辑框对应字符串
        }
    }
    UpdateData(FALSE);//更新编辑框内容
   
}

void CSCommTestDlg::OnButtonManualsend()
{
    // TODO: Add your control notification handler code here
    UpdateData(TRUE);//读取编辑框内容
    m_ctrlComm.SetOutput(COleVariant(m_strEditTXData));//发送数据
   
}
希望懂得大神能快点回复一下,谢谢,谢谢,谢谢。。。。。。
#3
hjxlj2014-09-30 20:34
"我串口接收到的数据是这样的数据4F 03 4F 03 0C 03 3C 03 5F 07 ........"
你上面这些数据如何判断哪个是高字节,哪个是低字节?判断的依据是什么?
另外,"现在我想要进行计算公式是:((低字节的十进制数)*256+(高字节的十进制数))/10;……",你是所有的高低字节按你的公式进行连续计算,还是每个高低字节按你的公式进行计算。
要想别人帮助自己,首先必须让别人理解自己的意图。
#4
天使梦魔2014-09-30 21:05
int转cstring:
strtemp.Format("%C",bt);//将字符送入临时变量strtemp存放


cstring转int:
CString str("1234");
int i= _ttoi(str);

1