我正在建立一个ostringstream。
我正在写int
这个流。
我stream<<" ";
在两个数字之间使用。我将此流转换为字符串并通过 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;
}
现在我想写二进制数据,所以
我用写函数写二进制数据,例如这里的数据结构(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 个这样的数据结构,然后在接收端使用 split 方法,这取决于我有时会得到超过 15 个字符串(例如 18 个)的数据,因为二进制数据本身可能具有 ascii 空格字符在里面。至少这就是我认为的问题所在。
如何解决这个问题呢?
---edit--- 我在一个流中添加这15个数据结构,在我开始添加某些int之后,所以我需要使用split方法来获取这些初始数字。