首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

在c++ builder中为啥小弟我的数据显示不对呢?

2012-06-14 
在c++ builder中为啥我的数据显示不对呢???我用ShowMessage查看每个buff中的接收的数据都没什么错,但我一

在c++ builder中为啥我的数据显示不对呢???
我用ShowMessage查看每个buff中的接收的数据都没什么错,但我一左移后再查看就不行了,出现的数据很怪,例如我buff[2]=255,buff[3]=170(即十六进制中buff[2]=FF,buff[3]=AA),我把buff[3]左移八位后再加上buff[2]本来我认为得出的值是43775,除以100后应该得出data1=437.75但事实上得到的是437.75和654.669982910156这个两个数交替出现,其他的也是同样出现小数点后很多位的数。希望路过的高手们帮帮我。 我接收数据部分程序如下:

  MSComm1->InputLen=0;//确定希望从接收缓冲区移出的字符数量,InputLen=0时一次把接收缓冲区的字符全部移出
  MSComm1->InBufferSize=1024;//接收缓冲区为1024字节
  MSComm1->OutBufferSize=512;//发送缓冲区为512字节
  MSComm1->SThreshold=0;//表示发送数据时不发生OnComm事件
  MSComm1->RThreshold=1;
  MSComm1->InputMode=1;//以二进制格式接受数据
  MSComm1->CommPort=StrToInt(ComboBox1->Text);//选择串口号
  MSComm1->Settings=
  ComboBox2->Text+","+
  ComboBox3->Text+","+
  ComboBox4->Text+","+
  ComboBox5->Text;//设置串口的属性波特率、奇偶校验、数据位和、//停止位。
  MSComm1->PortOpen=true;//打开串口

void __fastcall TForm1::MSComm1Comm(TObject *Sender)
{  
  byte buff[100];//声明一个存储接收数据的缓冲区
  float data1,data2,data3,data4,data5,data6,data7,data8,data9,data10,data11,data12,data13,data14,data15,data16,data17,data18,data19;
  int ByteNum;//收到的字节数
  OleVariant RxBuff;
  if(MSComm1->CommEvent==comEvReceive)//表示接收缓冲区内有字符
  {
  if(MSComm1->InBufferCount>0)
  {
  RxBuff=MSComm1->Input;//如果缓冲区中有多于一个字节的数据
  ByteNum=RxBuff.ArrayHighBound(1);
  for(int i=0;i<=ByteNum;i++)buff[i]=RxBuff.GetElement(i);
  
  if(buff[0]==255)//判断前八位是否为全1
  { data1=(buff[3]*16*16+buff[2])*0.01;
  data2=(buff[5]*16*16+buff[4])*0.01;
  data3=(buff[7]*16*16+buff[6])*0.01;
  data4=(buff[9]*16*16+buff[8])*0.01;
  data5=(buff[11]*16*16+buff[10])*0.01;
  data6=(buff[13]*16*16+buff[12])*0.01;
  data7=(buff[15]*16*16+buff[14])*0.01;
  data8=(buff[17]*16*16+buff[16])*0.01;
  data9=(buff[19]*16*16+buff[18])*0.01;
  data10=(buff[21]*16*16+buff[20])*0.01;
  data11=(buff[23]*16*16+buff[22])*0.01;
  data12=(buff[25]*16*16+buff[24])*0.01;
  data13=(buff[27]*16*16+buff[26])*0.01;
  data14=(buff[29]*16*16+buff[28])*0.01;
  data15=(buff[31]*16*16+buff[30])*0.01;
  data16=(buff[33]*16*16+buff[32])*0.01;
  data17=(buff[35]*16*16+buff[34])*0.01;
  data18=(buff[37]*16*16+buff[36])*0.01;
  data19=(buff[39]*16*16+buff[38])*0.01;
   
  temp1=data1;
  temp2=data2;
  temp3=data3;
  temp4=data4;
  temp5=data5;
  temp6=data6;
  temp7=data7;
  temp8=data8;
  temp9=data9;
  temp10=data10;
  temp11=data11;
  temp12=data12;
  temp13=data13;
  temp14=data14;
  temp15=data15;
  temp16=data16;
  temp17=data17;
  temp18=data18;
  temp19=data19;
  }
  else
  {
  data1=0;
  data2=0;
  data3=0;
  data4=0;
  data5=0;
  data6=0;
  data7=0;
  data8=0;
  data9=0;
  data10=0;
  data11=0;
  data12=0;
  data13=0;
  data14=0;


  data15=0;
  data16=0;
  data17=0;
  data18=0;
  data19=0;
  buff[0]=0;
  buff[1]=0;
  buff[2]=0;
  buff[3]=0;
  buff[4]=0;
  buff[5]=0;
  buff[6]=0;
  buff[7]=0;
  buff[8]=0;
  buff[9]=0;
  buff[10]=0;
  buff[11]=0;
  buff[12]=0;
  buff[13]=0;
  buff[14]=0;
  buff[15]=0;
  buff[16]=0;
  buff[17]=0;
  buff[18]=0;
  buff[19]=0;
  buff[20]=0;
  buff[21]=0;
  buff[22]=0;
  buff[23]=0;
  buff[24]=0;
  buff[25]=0;
  buff[26]=0;
  buff[27]=0;
  buff[28]=0;
  buff[29]=0;
  buff[30]=0;
  buff[31]=0;
  buff[32]=0;
  buff[33]=0;
  buff[34]=0;
  buff[35]=0;
  buff[36]=0;
  buff[37]=0;
  buff[38]=0;
  buff[39]=0;
   
  }
   

  }
  }

}


[解决办法]
试试:
data1=(1.0*buff[3]*16*16+buff[2])*0.01;

[解决办法]

探讨

我现在的问题是,前三个data1、data2、data3能一直不变地正确显示一个数,但其他的16个则是不断变化,而且变化的数中基本都是错的。都是同一接收的同一显示的,为啥唯独前面三个可以正确显示???

热点排行