写了一个串口接收的上位机,字符接收正常,请问怎么实现接收16进制数据并显示在编辑框中,在缓冲区种的数据是“\x1f\xff”这种,要在编辑框显示1f ff,看了其他人的代码像这样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); //字符型
if (m_ctrlHexDiaplay.GetCheck())
strtemp.Format("%02X ", bt); //将字符以十六进制方式送入临时变量strtemp存放,注意这里加入一个空隔
else
strtemp.Format("%c", bt); //将字符送入临时变量strtemp存放 m_EditReceive += strtemp; //加入接收编辑框对应字符串
}但是会出现程序崩溃的情况,求大神解决将将缓冲区的16进制数据读出来显示在编辑框。
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); //字符型
if (m_ctrlHexDiaplay.GetCheck())
strtemp.Format("%02X ", bt); //将字符以十六进制方式送入临时变量strtemp存放,注意这里加入一个空隔
else
strtemp.Format("%c", bt); //将字符送入临时变量strtemp存放 m_EditReceive += strtemp; //加入接收编辑框对应字符串
}但是会出现程序崩溃的情况,求大神解决将将缓冲区的16进制数据读出来显示在编辑框。
解决方案 »
- 如何在MFC中添加浏览器的相关按钮
- 设置外部程序跟随对话框移动
- 关于ODBC类中的 数据绑定
- 关于CMap怎样用CString做Key
- 用一个程序配置dll里面封装的函数的参数的问题
- 学习使用CAsyncSocket编程,请问UDP与TCP的区别
- how to change more than one disk parterner in master in xp?
- 这个问题这么问了这么久,都没人能帮我呢?在发布使用了ADO进行数据库编程的程序时,老是提示接口不对...
- 到底怎么共享DLL中的数据?(跟帖
- 写一个窗口类,如何连接数据库?生成可扩展的DLL
- MFC串口16进制接收问题
- 主线程post登录网站后,如何使用多线程操作呢
variant_inp = m_MSComm.get_Input(); //读缓冲区
safearray_inp = variant_inp; //VARIANT型变量转换为ColeSafeArray型变量
len = safearray_inp.GetOneDimSize(); //得到有效数据长度
BOOL bHexFlag = m_ctrlHexDiaplay.GetCheck();
for (k = 0; k<len; k++)
{
BYTE bt;
safearray_inp.GetElement(&k, &bt);//转换为BYTE型数组
if (bhexFlag)
strtemp.Format("%02X ", bt); //将字符以十六进制方式送入临时变量strtemp存放,注意这里加入一个空隔
else
strtemp.Format("%c", bt); //将字符送入临时变量strtemp存放
m_EditReceive += strtemp; //加入接收编辑框对应字符串
}
safearryay_inp = variant_inp; //VARIANT型变量转换为ColeSafeArray型变量
len = safearryay_inp.GetOneDimSize(); //得到有效数据长度
// 接受数据
for(k=0;k<len;k++)
{
safearryay_inp.GetElement(&k,rxdata+k); //转换为BYTE型数组
}
Sleep(1);
for (k=0;k<len;k++)
{
BYTE bt=*(char*)(rxdata+k); //字符型
stremp.Format("%02X ",bt);
m_EditReceive += stremp;
}
代码没啥问题 调试模式,在出错的时候,点击左下角的调用堆栈,然后从上往下双击,看出问题的那行代码,能看懂的那行就是你的错误所在