MFC编辑框输入内容与显示内容转为16进制数据——更正版

37 篇文章 0 订阅

最近工作中用到向串口发送16进制命令,所以就需要将输入的内容转为16进制。

由于要向串口发送16进制命令,所以我将命令存入unsigned char数组中。

代码:

  char ncharGlobalCommandRes[9]={0xaa,0x55,0x77,0x70,0x07,0x00,0x00,0x00,0xed};  //串口命令
  CString nstrResolution;
  char buff[2]={0x00};
  unsigned int ntemp;
 GetDlgItemText(IDC_Global_Edit_EncoderResolution,nstrResolution);    //获取编辑框字符串内容
 ntemp=atoi(nstrResolution);                                                                       //字符串转为整形数据

 _itoa(ntemp,buff,16);           //将整形数据转换为16进制数据存入buff数组,使用中注意ntemp超出buff范围

int flag=sscanf(buff,"%2x%2x",&ncharGlobalCommandRes[6],&ncharGlobalCommandRes[7]);   //%2x中数字为确定读入字符长度
 ncharGlobalCommandRes[8]=0xed;


/*下面这种方法也是可以的,但是学艺不精对sscanf不够了解,现已解决,复制的命令多了一条,会覆盖串口命令中的最后一个,需要重新再赋值;*/

//nstrResolution.Format("%x",ntemp);                      //也可以这样转换为16进制

//sscanf的使用要特别注意,理解好参数的格式,%2x中数字为确定读入字符长度

//int flag=sscanf(nstrResolution,"%2x%2x",&ncharGlobalCommandRes[6],&ncharGlobalCommandRes[7]);

//ncharGlobalCommandRes[8]=0xed;

/*还有一种思路,我没有实现,不知道怎样把字符中的16进制内容,复制到另一个字符变量的内存中,保持16进制数据格式*/

 //memcpy(buff,nstrResolution,nstrResolution.GetLength());

 /*ncharGlobalCommandRes[6]=buff[0];      //怎样把16进制的字符内容,存入另一个字符内存中
 ncharGlobalCommandRes[7]=buff[1];*/


下面是显示内容时,将数据转为16进制显示:


void CSetSignalBoxDlg::OnReceive(LPCSTR nstrText, LPCSTR nstrIP,UINT nPort,unsigned nlength)
{

   CString nstr,nstrtemp;
 unsigned char buf[1024];
 CString nstrtap=" ";
 CString nstrline="\r\n";
 memcpy(buf,nstrText,nlength);

 SetDlgItemText(IDC_EDIT_ServerIP,nstrIP);
 CTime ntime = CTime::GetCurrentTime();
 CString nstrtime = ntime.Format("%H:%M:%S");
 //nstr+=nstrText;
 //nstr+="\r\n";
 nstr.Format("%s-%d-%s:\r\n",nstrIP,nPort,nstrtime);
 int nLength=m_editOutput.GetWindowTextLength();   //获取当前文字长度
 m_editOutput.SetSel(nLength,-1);  //设置位置为末尾
 m_editOutput.ReplaceSel(nstr);
 for(int i=0;i<nlength;i++)
 {
  if (i%18==0&&i!=0)          //每行显示18个字节的数据
  {
   m_editOutput.ReplaceSel(nstrline);
  }
  nstrtemp.Format("%02x",buf[i]);
  m_editOutput.ReplaceSel(nstrtemp);
  m_editOutput.ReplaceSel(nstrtap);
 
 }
 m_editOutput.ReplaceSel(nstrline);
 m_editOutput.ReplaceSel(nstrline);
 
}



  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值