在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;
[解决办法]