打印

请求帮忙,麻烦。。。

[复制链接]
1790|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
kusheng176|  楼主 | 2010-9-18 12:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
AN, AFE, ge, COM, TE
我做了一个32*32的格子方阵,分别代表X、Y方向,根据输入信号,来判断对哪个格子涂色。
输入:8个8位数据,例如(一组数据:00 00 f0 00 00 0e 00 00;前四个代表Y轴的数据,后四个代表X轴,根据这些值来确定XY的坐标)

输出:就是我用VC++做的MFC面板,如上的方阵。

我现在的问题就是:我用MScomm控件接收到的,是16进制数,但是我要根据这些数据来确定XY的坐标的话,是否需要转换成2进制数,又如何根据这些数,来一一对应相应的坐标呢?(请教代码,谢谢)   


VARIANT variant_inp;
COleSafeArray safearray_inp ;
LONG len,k;
unsigned char bufferfifo[8];
unsigned char *pa=bufferfifo;
int result=0;
BYTE rxdata [2048] ; //设置BYTE 数组An 8bit integerthat is not signed.
CString buffer;
if (m_ctrlScom. GetCommEvent()==2)// 事件值为2 表示接收缓冲区内有字符
{ ///// 以下可以根据自己的通信协议加入处理代码
        variant_inp = m_ctrlScom. 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) ;
      buffer.Format("%02x",bt); //将字符送入临时变量buffer存放
   *pa=bt;
   result+=*pa;              //对8位求和,判断是否=0x00(间隔符)
   pa++;
   m_output+=buffer;
   m_zijie+=1;
   UpdateData(FALSE);  
  }
  m_edit123=result;
  if (result==0)
  {
   huanyuan();                //进行坐标的映射
  }
  UpdateData(FALSE);
}

相关帖子

沙发
xwj| | 2010-9-18 13:33 | 只看该作者
所谓的“16进制数”和二进制实际上是一回事,只是写法不同罢了,对于程序是没有区别的。


LZ,你需要先理解“位”的概念,然后学会使用“移位”:<< 、>>

使用特权

评论回复
板凳
kusheng176|  楼主 | 2010-9-18 13:36 | 只看该作者
2# xwj

那请问下我要如何根据每一位的数值去对相应的格子涂色呢?

使用特权

评论回复
地板
xwj| | 2010-9-18 13:52 | 只看该作者
先区别大端、小端,正确排列后,与(1<<x),看是否为0,就知道该位是否为1了。

这可以说是C语言的最基本技巧,但对于只搞PC机程序的,习惯了浪费,结果很多人都不知道“位”的概念和处理了:)

使用特权

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

本版积分规则

0

主题

64

帖子

1

粉丝