串口控件!!!!急!!!

voidCCommDlg::OnComm(){//TODO:AddyourcontrolnotificationhandlercodehereVARIANTvariant... void CCommDlg::OnComm()
{
// TODO: Add your control notification handler code here
VARIANT variant_inp;
COleSafeArray safearray_inp;
LONG len,k;
BYTE rxdata[2054]; //设置BYTE数组 An 8-bit integerthat is not signed.
CString strtemp;
if(m_Comm1.GetCommEvent()==2) //事件值为2表示接收缓冲区内有字符
{
variant_inp=m_Comm1.GetInput(); //读缓冲区
safearray_inp=variant_inp;//VARIANT型变量转换为ColeSafeArray型变量
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("%c",bt); //将字符送入临时变量strtemp存放
m_Show+=strtemp; //加入接收编辑框对应字符串
}
}
UpdateData(TRUE);
}
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); //字符型
这两句是什么意思。请大家帮忙。谢谢!急!!!
谢谢,您的方法很好,只是我获取Len的长度,值刚开始是0;一会就变成65535了,这是为什么那,谢谢!还有,我想发送的时候发送出去的是十六进制,接收时也接收十六进制,帮忙给点思路。谢谢!
展开
 我来答
conanwj1980
2008-07-09 · TA获得超过438个赞
知道小有建树答主
回答量:162
采纳率:0%
帮助的人:79.5万
展开全部
你的代码中len没有赋值,在代码safearray_inp=variant_inp;后面加入下面这句
len=(USHORT)safearray_inp.GetOneDimSize(); //得到有效数据长度

解释以下你的疑问:
for(k=0;k<len;k++)
safearray_inp.GetElement(&k,rxdata+k);
// 将safearray_inp中的元素一个个提取出来保存到到你自己定义的BYTE型数组rxdata中

for(k=0;k<len;k++)
{
BYTE bt=*(char*)(rxdata+k);
strtemp.Format("%c",bt);
m_Show+=strtemp;
}
这段代码的意图是想将rxdata数组的元素一个个转换为字符,逐个添加到m_Show这个Cstring变量中。
但是其实此处多此一举rxdata本来就是BYTE型数组,为何还要用BYTE bt=*(char*)(rxdata+k);这句重复的转一次呢。而且一个个字符转换,效率太低了。建议用以下代码:
rxdata[len]='\0'; // rxdata加个字符串结束符
m_Show.AppendFormat(_T("%s"),rxdata);// 此句把整个rxdata数组内容作为字符串追加入m_Show,字符串长度为len。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式