java-flash 2015-12-16 06:02 采纳率: 100%
浏览 1608
已采纳

mfc串口数据绘制波形图,能否帮我看下这样处理是什么意思,尤其是for循环里面,急急急,拜托了

COleSafeArray m_number;
long length,i;
BYTE data[600];
int ai=0,bi=0,ci=0,di=0;
int sum=0;
m_number=ch; //将WPARAM ch转化为COleSafeArray形变量
length=m_number.GetOneDimSize(); //确定数据长度
for(i=0;i<length;i++)
m_number.GetElement(&i,data+i);
for(i=0;i<length-1;i++)
{
CString tmstr;
if(*(data+i)==45)
{
BYTE a,b,c,d;
a=*(data+i+1)-48;
b=*(data+(i+3))-48;
c=*(data+(i+4))-48;
d=*(data+(i+5))-48;
i=i+5;
ai=a,bi=b,ci=c,di=d;
sum=((ai*1000+bi*100+ci*10+di)*(-1));
LineHight[751]=sum+9000;
Drawing_preparation();
}
else
{
BYTE a,b,c,d;
a=*(data+i)-48;
b=*(data+(i+2))-48;
c=*(data+(i+3))-48;
d=*(data+(i+4))-48;
i=i+5;
ai=a,bi=b,ci=c,di=d;
sum=((ai*1000+bi*100+ci*10+di)*(-1));
LineHight[751]=sum+9000;
Drawing_preparation();

    }
  • 写回答

1条回答 默认 最新

  • threenewbee 2015-12-16 06:12
    关注

    a b c d各自表示一个数据的千位、百位、十位、个位的ascii值,这里根据字符串的值得到对应的整数。至于为什么减掉48,因为48是'0'的ascii,49是'1',以此类推。
    sum=((ai*1000+bi*100+ci*10+di)*(-1));用它合成完整的数值。data + i就是data[i],data +( i + 1)就是data[i + 1];
    其实有现成的函数atoi可以将字符串转换成数字的,这代码写得也够奇葩的了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料