打印

关于MScomm控件

[复制链接]
1877|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

那请问下,我这段程序有什么问题没?
或者是显示的原因?

使用特权

评论回复
5
原野之狼| | 2010-9-10 20:31 | 只看该作者
BYTE bt=*(int * ) (rxdata+k) ;
这样写是不行的 左边是BYTE 右边是int 而且还是未定义内存里的内容

使用特权

评论回复
6
xlsbz| | 2010-9-10 23:08 | 只看该作者
啥语言 C++ 还是VB 啥的?

这么强!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

64

帖子

1

粉丝