关于MScomm控件

[复制链接]
3072|5
 楼主| kusheng176 发表于 2010-9-10 12:51 | 显示全部楼层 |阅读模式
想问一下,用MScomm控件如何接收16进制数?我用了下面的程序,怎么接收不到数据?
VARIANT variant_inp;
COleSafeArray safearray_inp ;
LONG len,k ;
BYTE rxdata [2048] ; //设置BYTE 数组An 8 - bit integerthat is not signed.
CString strtemp ;
if (m_ctrlComm. GetCommEvent()==2)// 事件值为2 表示接收缓冲区内有字符
{   
         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=*(int * ) (rxdata+k) ;
  strtemp.Format ("%02x",bt);//将字符送入临时变量strtemp存放
  m_display+=strtemp; //加入接收编辑框对应字符串
         }
         }
sysdriver 发表于 2010-9-10 13:09 | 显示全部楼层
协议时:8位数据,1个起始位,1个停止位。

你可以程序控制,接收16位
airwill 发表于 2010-9-10 13:21 | 显示全部楼层
不是说 16 位吧,
楼主要 16进制数, 我感觉这只是显示问题, 不存在不能收发 16进制数的问题.
 楼主| kusheng176 发表于 2010-9-10 19:22 | 显示全部楼层
3# airwill

那请问下,我这段程序有什么问题没?
或者是显示的原因?
原野之狼 发表于 2010-9-10 20:31 | 显示全部楼层
BYTE bt=*(int * ) (rxdata+k) ;
这样写是不行的 左边是BYTE 右边是int 而且还是未定义内存里的内容
xlsbz 发表于 2010-9-10 23:08 | 显示全部楼层
啥语言 C++ 还是VB 啥的?

这么强!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

64

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部