我正在尝试使用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)
答案 0 :(得分:3)
您假设二进制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);
}