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

MFC 串口数据16进制转成10进制问题

yijianhanmei 发布于 2013-06-21 21:38, 3621 次点击
我用Visual studio 2010的MSSCOMM控件做一个PC机和单片机的串口通信界面,我要把单片机发送给PC机的数据进行处理。比如单片机发送的数据是0xABCDEF,我想把BDE和在一起以十进制形式显示在一个编辑框,也就是显示数为3038(0xBDE),。不知道怎么编程,求帮助。下面的程序是我把BDE显示在编辑框的程序,但是是以16进制显示的,急求大家帮我改改程序。

void CCommTestDlg::OnCommMscomm1()
{
    // TODO: 在此处添加消息处理程序代码
 
    VARIANT variant_inp;
    COleSafeArray safearray_inp;
    LONG len,k;
    BYTE rxdata[2048]; //设置BYTE数组 An 8-bit integerthat is not signed.
    CString strtemp;
    if(m_mscomm.get_CommEvent()==2) //事件值为2表示接收缓冲区内有字符
    {             ////////以下你可以根据自己的通信协议加入处理代码
    variant_inp=m_mscomm.get_Input(); //读缓冲区
    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++) //将数组转换为Cstring型变量
    {
        BYTE bt=*(char*)(rxdata+k); //字符型
        strtemp.Format(_T("%x"),bt); //将字符送入临时变量strtemp存放
        m_EditReceive+=strtemp.Mid(1,1); //加入接收编辑框对应字符串 "B"
        m_EditReceive+=strtemp.Mid(3,2);//取出"DE"
    }
    }
    UpdateData(FALSE); //更新编辑框内容
 
    }
5 回复
#2
雪花儿帅帅2014-09-12 16:32
回复 楼主 yijianhanmei
请问你这个问题解决了吗?我现在也遇到这个问题了,你如果是解决了,能给我看看吗?非常非常感谢!
#3
wangle2122015-01-26 11:17
可以按位取,然后在拼成一个变量!
#4
wangle2122015-01-26 11:23
long a = 0xABCDEF;
    long b = 0x000000;

    b = a & 0x0F0FF0;
#5
初梦2019-06-22 23:54
#6
初梦2019-06-22 23:57
老哥,帮帮忙告诉怎么解决的
1