私はostringstreamを構築しています。
int
私はこのストリームに s を書いていました。
私はstream<<" ";
2つの番号の間で使用しています。このストリームを文字列に変換し、UDP で送信します。
受信側では、これらの関数を使用して、文字列を " " スペース文字で個々の数字に分割しています。
std::vector<std::string> split(const std::string &s, char delim) {
std::vector<std::string> elems;
split(s, delim, elems);
return elems;
}
std::vector<std::string> &split(const std::string &s, char delim, std::vector<std::string> &elems) {
std::stringstream ss(s);
std::string item;
while (std::getline(ss, item, delim)) {
elems.push_back(item);
}
return elems;
}
ここでバイナリデータを書きたいので
、 write 関数を使用してバイナリデータを書きます。たとえば、ここのデータ構造です ( http://robot.kaist.ac.kr/haptics/chai3d-2.0.0_Doc/resources/html/structc_matrix3d .html )
void insert_into_stream(std::ostream& stream, const cMatrix3d rot)
{
cVector3d column;
unsigned int byteCounter = 0;
int length = sizeof(double)*3;
char insert_buffer[sizeof(double)*9];
column = rot.getCol0();
memcpy(insert_buffer, &column[0], length);
stream.write(insert_buffer, length);
byteCounter += length;
column = rot.getCol1();
memcpy(insert_buffer+byteCounter, &column[0], length);
stream.write(insert_buffer, length);
byteCounter += length;
column = rot.getCol2();
memcpy(insert_buffer+byteCounter, &column[0], length);
stream.write(insert_buffer, length);
}
ストリームに追加し、各エントリをスペース文字で区切ります。
このようなデータ構造を 15 個追加し、レシーバー側で分割メソッドを使用すると、バイナリ データ自体に ASCII スペース文字が含まれている可能性があるため、データによっては 15 個以上の文字列 (例: 18 個) を取得する場合があるため、これはうまく機能しません。その中。少なくともそれが問題だと思います。
この問題を解決するには?
---編集---- 最初に特定の int を追加した後、これらの 15 のデータ構造をストリームに追加するため、分割メソッドを使用してこれらの初期番号を取得する必要があります。