大猿猴 2019-08-29 20:13 采纳率: 0%
浏览 531
已采纳

MFC串口发送,待发送的数据转成16进制后出现乱码

做了一个串口助手,想实现十六进制发送,但是待发送的数据转成16进制后出现乱码

void CMXC18083SDlg::OnBnClickedButton2()//“发送数据”单击事件
{
    //默认方式是十六进制手动发送
    //TODO: 在此添加控件通知处理程序代码
    CString temp;
    UpdateData(true);
    temp = m_strSend;//"发送"显示编辑框
    temp = ChangeCharstr2Hexstr(temp);//十六进制发送
    if (temp.GetLength())//发送编辑框有内容
    {
        u2clas.WriteToPort((char*)temp.GetBuffer(temp.GetLength()), temp.GetLength());
        UpdateData(false);
    }
}

char CMXC18083SDlg::CombineHexChar(char CharH, char CharL)
{
    char result;
    CString temp;
    char result1;
    int num1;
    int num2;
    int num3;

    if (CharH >= '0' && CharH <= '9')       result = (CharH - '0');
    else if (CharH >= 'a'&& CharH <= 'f')   result = (CharH - 'a' + 10);
    else if (CharH >= 'A'&& CharH <= 'F')   result = (CharH - 'A' + 10);
    else                                result = 0;

    if (CharL >= '0' && CharL <= '9')       result1 = (CharL - '0');
    else if (CharL >= 'a' && CharL <= 'f')  result1 = (CharL - 'a' + 10);
    else if (CharL >= 'A' && CharL <= 'F')  result1 = (CharL - 'A' + 10);
    else                                result1 = 0;

    num1 = result;
    num2 = result1;

    num3 = num1 * 16 + num2;
    return (char)num3;
}

这是我要发送的AA,CString类型的,两个字节
这是我把AA转换成一个字节0XAA,对应的十进制170
这个是转回去之后就变成乱码了,我想要的结果是0XAA算一个字节
大佬们求助!!!!!!!!!!谢谢大佬

  • 写回答

1条回答 默认 最新

  • threenewbee 2019-08-29 23:27
    关注

    num3 = num1 * 16 + num2;
    num3不是char类型,而是数字,要用 itoa 再转回去

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 求MCSCANX 帮助
  • ¥15 机器学习训练相关模型
  • ¥15 Todesk 远程写代码 anaconda jupyter python3
  • ¥15 我的R语言提示去除连锁不平衡时clump_data报错,图片以下所示,卡了好几天了,苦恼不知道如何解决,有人帮我看看怎么解决吗?
  • ¥15 在获取boss直聘的聊天的时候只能获取到前40条聊天数据
  • ¥20 关于URL获取的参数,无法执行二选一查询
  • ¥15 液位控制,当液位超过高限时常开触点59闭合,直到液位低于低限时,断开
  • ¥15 marlin编译错误,如何解决?
  • ¥15 有偿四位数,节约算法和扫描算法
  • ¥15 VUE项目怎么运行,系统打不开