C 将浮点数从服务器发送到客户端

C 将浮点数从服务器发送到客户端,c,sockets,floating-point,client,C,Sockets,Floating Point,Client,我正在使用TCP/IP套接字编程。我的服务器代码中有一个浮点值存储在变量ret_val中,我想将其发送给等待接收它的客户端 如何操作?如果您知道客户端和服务器都是相同的平台等,您可以简单地使用sizeof(float)来确定缓冲区大小,并从float地址复制这么多字节 float number = 123.45; send(sockfd, &number, sizeof(float),0); 一旦您的客户机/服务器是不同的平台/不同的语言等,您就必须开始担心如何可移植地编码浮点。但对于

我正在使用TCP/IP套接字编程。我的服务器代码中有一个浮点值存储在变量ret_val中,我想将其发送给等待接收它的客户端


如何操作?

如果您知道客户端和服务器都是相同的平台等,您可以简单地使用
sizeof(float)
来确定缓冲区大小,并从float地址复制这么多字节

float number = 123.45;
send(sockfd, &number, sizeof(float),0);
一旦您的客户机/服务器是不同的平台/不同的语言等,您就必须开始担心如何可移植地编码浮点。但对于一个简单的方法,上面的方法可以很好地工作

float f = ...;
size_t float_size = sizeof(float);
const char* buffer = (const char *) &f;
send(mySocket, buffer, float_size, 0);

如果服务器和客户机使用相同的平台,则此代码可以正常工作。如果平台不同,则必须明确协商消息大小和结尾。

是否使用文本表示

char buf[32] ; 
snprintf(buf,sizeof buf,"%f",ret_val); 
write(fd,buf,strlen(buf));
您可以读取该字符串并使用sscanf再次解析它。(甚至可以使其以行结尾-“%f\n”-这样您就可以知道数字何时结束。)

直接的方法是

write(fd,&ret_val,sizeof ret_val);

在这两种情况下,您都应该检查write的返回值,并在发生错误时采取适当的措施,或者write()写入的字节数少于您告诉它的字节数。

如果您指定发送方和接收方正在使用的语言和/或运行时,可能会有所帮助。非常好。泰铢feedback@BrianAgnew对不起,这里有一个愚蠢的问题,你说客户端和服务器都在同一个平台上是什么意思?处理器类型?32对64位等