0
Sendto関数を使用してUDP winsockでダブルを送信しようとしていますが、まずchar []に変換する必要があります。複数のアプローチを試した後、私が思いついた最高のものは以下の通りです:C++で埋め尽くさないように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)
私の提案は、ということです参照してください:
は、そうしないと、このような何かを行うことができます受信側と送信側の両方でsizeof doubleが8であることを確認してバイナリ形式で送信するだけです。 – NoSenseEtAl
文字ポインタまたはcharの配列を使用しないでください。std :: stringとおそらくはstd :: stringstreamを使用してください。 –
@NoSenseEtAlバイナリ形式の浮動小数点は、常にポータブルであるとは限りません。 – Galik