[英]Convert double to char array without padding in c++
我正在尝试使用Sendto函数通过UDP winsock发送一个double,但是首先我需要将其转换为char []。 在尝试了多种方法之后,我想到的最好的方法是:
// send
memset(buf, '\0', BUFLEN);
double a = position.y();
char arr[sizeof(a)];
cout << "double" << a << endl;
ToString(arr, sizeof(a), a);
sendto(s, arr, strlen(arr), 0, (struct sockaddr *) &si_other, slen);
cout << "Send" << arr << endl;
不幸的是,这给出了奇怪的尾随填充,破坏了发送操作。 关于如何解决这个问题的任何想法?
我的ToString函数如下:
void ToString(char * outStr, int length, double val)
{
_snprintf(outStr, length, "%f", val);
}
输出看起来像这样:
double 0.003
Send 0.003(a bunch of gibberish)
您假设二进制double
精度占用的字节数与转换后的字符串占用的字节数相同,但这不太可能。
如果您拥有C++11
,则可以执行以下操作:
void send_double(int s, sockaddr* si_other, int slen, double d)
{
auto buf = std::to_string(d);
sendto(s, buf.data(), buf.size(), 0, si_other, slen);
}
否则,您可以执行以下操作:
void send_double(int s, sockaddr* si_other, int slen, double d)
{
std::ostringstream oss;
oss << d;
std::string buf = oss.str();
sendto(s, buf.data(), buf.size(), 0, si_other, slen);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.