有谁知道MSCOMM串行通信原理,什么时候触发commevent事件?我读缓冲区数据长度为什么不对

wazq wazq 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
int len;
LONG k;
BYTE rxdata[2048]; //设置BYTE数组 An 8-bit integerthat is not signed.
CString strtemp;
if(m_ctrlComm.GetCommEvent()==2) //事件值为2表示接收缓冲区内有字符
{ ////////以下你可以根据自己的通信协议加入处理代码
bk=m_ctrlComm.GetInBufferCount();
variant_inp=m_ctrlComm.GetInput(); //读缓冲区
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); //字符型
strtemp.Format("%c",bt); //将字符送入临时变量strtemp存放
m_strRXData+=strtemp; //加入接收编辑框对应字符串
b[k]=atoi(strtemp);
}


}


大家看看,当我发到好多个字符时, 我读缓冲区数据长度bk和len 都不是我实际收到的字节数,比如我收到11个,数据长度len显示为3,怎么才能得到实际的数据长度,这其中通信到底是什么原理呢?

另外,我想把接收到的数,分别存到数组b[k]中,为什么b[k]最大只能存进8个数,因为len的最大值只能是8,多于8时,又从1开始计数,怎么解决啊?
...全文

相关推荐

评论 14
收藏 已收藏
分享
返回顶部
wazq
VC/MFC 16,550 成员 421,606 内容