tcp float数据传输问题

最近在写一个速度控制程序,两端用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。可能是存储过程中造成的误差,并没有深究,而是打算将发送数字都改成整数,发送过去后,在进行还原。

猜你喜欢

转载自blog.csdn.net/jayandchuxu/article/details/69372315