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

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可以将字符串转换成数字的,这代码写得也够奇葩的了。

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

报告相同问题?

悬赏问题

  • ¥15 鼠标右键,撤销删除 复制 移动,要怎样删除
  • ¥15 使用MATLAB进行余弦相似度计算加速
  • ¥15 服务器安装php5.6版本
  • ¥15 我想用51单片机和数码管做一个从0开始的计数表 我写了一串代码 但是放到单片机里面数码管只闪烁一下然后熄灭
  • ¥20 系统工程中,状态空间模型中状态方程的应用。请猛男来完整讲一下下面所有问题
  • ¥15 我想在WPF的Model Code中获取ViewModel Code中的一个参数
  • ¥15 arcgis处理土地利用道路 建筑 林地分类
  • ¥20 使用visual studio 工具用C++语音,调用openslsx库读取excel文件的sheet问题
  • ¥100 寻会做云闪付tn转h5支付链接的技术
  • ¥15 DockerSwarm跨节点无法访问问题