在C ++中将double转换为char数组而不进行填充

Convert double to char array without padding in c++

我正在尝试使用 Sendto 函数通过 UDP winsock 发送双精度数,但首先我需要将其转换为 char[]。在尝试了多种方法之后,我想到的最好的方法如下:

    // send 
    memset(buf, '[=10=]', 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);
}

std::string, std::to_string and std::ostringstream