| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 740 人关注过本帖
标题:求助:在 MFC 上用 MSComm 控件编写串口程序,并想将接收到的字符转换成十进 ...
只看楼主 加入收藏
雪花儿帅帅
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2014-9-11
收藏
 问题点数:0 回复次数:3 
求助:在 MFC 上用 MSComm 控件编写串口程序,并想将接收到的字符转换成十进制,进行计算
真心求教:在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);//更新编辑框内容
   
}
搜索更多相关主题的帖子: 十进制 知识 
2014-09-12 15:36
雪花儿帅帅
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2014-9-11
收藏
得分:0 
程序是这样的,上边把正确的注释掉了
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));//发送数据
   
}
希望懂得大神能快点回复一下,谢谢,谢谢,谢谢。。。。。。
2014-09-12 15:41
hjxlj
Rank: 10Rank: 10Rank: 10
来 自:江西
等 级:贵宾
威 望:14
帖 子:292
专家分:1519
注 册:2013-6-25
收藏
得分:0 
"我串口接收到的数据是这样的数据4F 03 4F 03 0C 03 3C 03 5F 07 ........"
你上面这些数据如何判断哪个是高字节,哪个是低字节?判断的依据是什么?
另外,"现在我想要进行计算公式是:((低字节的十进制数)*256+(高字节的十进制数))/10;……",你是所有的高低字节按你的公式进行连续计算,还是每个高低字节按你的公式进行计算。
要想别人帮助自己,首先必须让别人理解自己的意图。

本人QQ:775420425
2014-09-30 20:34
天使梦魔
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:37
帖 子:564
专家分:2754
注 册:2007-8-29
收藏
得分:0 
int转cstring:
strtemp.Format("%C",bt);//将字符送入临时变量strtemp存放


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

2014-09-30 21:05
快速回复:求助:在 MFC 上用 MSComm 控件编写串口程序,并想将接收到的字符转换 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.034276 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved