用MFC写了一个串口接收的函数,为了测试,单片机stm32每隔一秒不停地发送同一个数,比如是0x32,想显示在接收框里面,但是每次显示都是乱码,如果以16进制显示就是8位16进制码。
设置断点调试了一下,发现bt是成功接收到了的,但是以cstring显示就乱码了,为什么呢?
代码如下:
void C无人机地面控制终端Dlg::OnCommMscomm1()
{
// TODO: 在此处添加消息处理程序代码
VARIANT VARIANT_Input;
COleSafeArray SafeArray_Input;
LONG len, k;
BYTE RXData[1024];
CString strtemp ;
if (m_mscom.get_CommEvent() == 2)
{
VARIANT_Input = m_mscom.get_Input(); //读缓冲区
SafeArray_Input = VARIANT_Input; //VARIANT型变量转换为COleSafeArray型变量
len = SafeArray_Input.GetOneDimSize();
for (k = 0; k< len; k++)
SafeArray_Input.GetElement(&k, RXData + k); //转换为BYTE型数组
for (k = 0; k < len; k++)
{
char bt = *(char*)(RXData + k);
strtemp.Format(_T("%c", bt));
m_EditReceive += strtemp; // 接收到编辑框里面
}
m_EditReceive += "\r\n";
UpdateData(false); m_Edit.SetSel(-1, -1);
this->SetDlgItemTextW(IDC_EDIT1, m_EditReceive);//将m_EditReceive内容显示到ID为IDC_EDIT1的编辑框的最后位置
m_Edit.LineScroll(m_Edit.GetLineCount() - 1, 0);//将垂直滚动条滚动到最后一
}
查了好久了也不知道为什么,求问,不甚感激!
设置断点调试了一下,发现bt是成功接收到了的,但是以cstring显示就乱码了,为什么呢?
代码如下:
void C无人机地面控制终端Dlg::OnCommMscomm1()
{
// TODO: 在此处添加消息处理程序代码
VARIANT VARIANT_Input;
COleSafeArray SafeArray_Input;
LONG len, k;
BYTE RXData[1024];
CString strtemp ;
if (m_mscom.get_CommEvent() == 2)
{
VARIANT_Input = m_mscom.get_Input(); //读缓冲区
SafeArray_Input = VARIANT_Input; //VARIANT型变量转换为COleSafeArray型变量
len = SafeArray_Input.GetOneDimSize();
for (k = 0; k< len; k++)
SafeArray_Input.GetElement(&k, RXData + k); //转换为BYTE型数组
for (k = 0; k < len; k++)
{
char bt = *(char*)(RXData + k);
strtemp.Format(_T("%c", bt));
m_EditReceive += strtemp; // 接收到编辑框里面
}
m_EditReceive += "\r\n";
UpdateData(false); m_Edit.SetSel(-1, -1);
this->SetDlgItemTextW(IDC_EDIT1, m_EditReceive);//将m_EditReceive内容显示到ID为IDC_EDIT1的编辑框的最后位置
m_Edit.LineScroll(m_Edit.GetLineCount() - 1, 0);//将垂直滚动条滚动到最后一
}
查了好久了也不知道为什么,求问,不甚感激!
解决方案 »
- 问题:VC/MFC ADO ACCESS数据库:关于删除一个表的记录的几种方法有何异同?
- 请问SDk建的窗口怎么动态显示字符串?
- 在windows下怎么用下载的linux的ISO文件安装linux
- 如果编程实现一个和交换机进行会话的图形界面程序
- 进度条的SetRange(0,10000); 这两个参数都是short 参数如果要大于100000了之后怎么办呢?
- listctrl 控件怎样改变每行的高度
- 我好惭愧!
- 100分求一软件。
- 如何循环调用类?急,在线等待。。。
- vc2010打开vc2003的工程
- VS2008下使用WINIO初始化失败StartWinIoDriver()函数
- 如何防止ID_EDIT_COPY被有道词典激发?
看看
strtemp.Format(_T("%c", bt));
结果
bt[0]=*(char*)(RXData + k);
WCHAR wch=(WCHAR)bt;