最近在写一个速度控制程序,两端用tcp连接,A端定时向B端发出控制速度。这里记录一下发生的问题和解决的方法。
1、float数字格式传递
由于写的发送函数是传输char[]数组,因此需要先将float转char[],为此,我用内存复制的方法,将存储float数字的内存使用memcpy函数,复制给数组,进行发送。:
float x1,y1,x2,y2,a1,a2,a4,a3;
x1=31467;
y1=23667;
x2=33865;
y2=34556;
char sendline[50];
sendline[0]='a';
memcpy(sendline+sizeof(char),&x1,4);
sendline[5]='\0';//我这里float占用四个字节,所以我直接写成5,实际上应该计算一下,一面出错。
memcpy(sendline+sizeof(char)*2+sizeof(float),&y1,sizeof(float));
sendline[10]='\0';
memcpy(sendline+sizeof(char)*3+sizeof(float)*2,&x2,sizeof(float));
sendline[15]='\0';
memcpy(sendline+sizeof(char)*4+sizeof(float)*3,&y2,sizeof(float));
sendline[20]='\0';
//下面的代码,主要为了在本地显示输出的数据,检验是否正确
memcpy(&a1,sendline+1,5);
memcpy(&a2,sendline+6,5);
memcpy(&a3,sendline+11,5);
memcpy(&a4,sendline+16,5);
qDebug("发送的数据为:%f,%f,%f,%f",a1,a2,a3,a4);
程序是用windows下用Qt Creator 4.2.0 (based on Qt 5.7.1(msvc 2015,32 bit))写成。
本来,速度是有小数形式,但是发现将其存成内存,在转成float,小数会发生变化。比如3.1415,经过转换后变成了3.141479。可能是存储过程中造成的误差,并没有深究,而是打算将发送数字都改成整数,发送过去后,在进行还原。