我做了一个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);
} |