将浮点数据转换为必须通过UDP发送的Char数据

时间:2014-12-15 08:54:11

标签: c sockets type-conversion

我正在使用C套接字将数据发送到服务器,我在互联网上找到了一些示例,但它们都显示了通过网络发送的字符数据。 相反,我的数据是浮点数,所以我需要将这些数据从float转换为char来发送它,而在Server端我必须将它转换回float。

我读过有关sprintf或snprintf的内容,但我发现使用这些函数时遇到了一些问题。

我的情况:

packet [4] = {112.3,113.4,234.8,599.4}“例如”

我需要将它作为char发送到服务器。

提前致谢

3 个答案:

答案 0 :(得分:1)

如果您非常小心,可以使用unionfloat表示为char的数组:

typedef union packet
{
    float f;
    char c[4];
} packet;

除了字节顺序(你可能需要旋转浮动)和char在某些平台上签名而在其他平台上无符号(根据品味调整),这是明确定义的。特别是,标准保证

  1. f的地址与c的第0个元素相同。

  2. c数组是连续的。

答案 1 :(得分:0)

int main(void)
{
    float value= 22.3;
    char valbuff[4]={0};
    memcpy(&valbuff,&value,4);
    float values = (float)atof(valbuff);
    printf("Valore %f ",values);
}
     

当我运行此代码时,out值为0.0000,...

由于您刚刚将float value复制到了char valbuff[4],因此atof(valbuff)将值重新置于float中是非常不合适的;你宁愿需要

    float values;
    memcpy(&values, valbuff, sizeof values);

答案 2 :(得分:-1)

我认为你对char缓冲区和char值感到困惑。在UDP通信中使用的字符缓冲区是承载数据信息所需的最小8位/ 1字节空间。这也等于char,其大小也是8bit / 1Byte。因此人们将其称为char缓冲区。这个dosenot意味着他们只能携带char值。

典型的浮点值长度为4个字节,可以在4byte char缓冲区中携带。请使用memcpy操作并将float变量的内容复制到4Byte char数组缓冲区中。在服务器中,基于源IP,可以很容易地将此​​值类型转换为从接收的char数组缓冲区浮动值(使用atof)。

code snippet:
//At Tx - from client
float flt =xx.xx;
char charbuff[4] ={0};
memcpy(&charbuff,&flt,4);


//At Rx - in server
if(Rx done from specific IP which sends float value)
{
float rflt = (float)atof(buffer); //build in function available
}