我正在使用C套接字将数据发送到服务器,我在互联网上找到了一些示例,但它们都显示了通过网络发送的字符数据。 相反,我的数据是浮点数,所以我需要将这些数据从float转换为char来发送它,而在Server端我必须将它转换回float。
我读过有关sprintf或snprintf的内容,但我发现使用这些函数时遇到了一些问题。
我的情况:
packet [4] = {112.3,113.4,234.8,599.4}“例如”
我需要将它作为char发送到服务器。
提前致谢
答案 0 :(得分:1)
如果您非常小心,可以使用union
将float
表示为char
的数组:
typedef union packet
{
float f;
char c[4];
} packet;
除了字节顺序(你可能需要旋转浮动)和char
在某些平台上签名而在其他平台上无符号(根据品味调整),这是明确定义的。特别是,标准保证
f
的地址与c
的第0个元素相同。
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
}