我正在尝试序列化对象,通过仅使用STL的套接字通过网络发送.我没有找到一种方法来保持对象的结构在其他主机中反序列化.我试过转换到string,char*并且我花了很长时间在互联网上搜索教程,直到现在我什么都没发现.
有没有办法只用STL做到这一点?
有没有好的教程?
我差点尝试提升,但如果有STL怎么做我想学习.
我正在尝试用C++序列化一组结构.这适用于除我的struct中包含的向量之外的所有数据.我可以将数据写入磁盘,然后将所有数据读回内存.唯一的问题是当我尝试访问向量的元素时,我得到了一个分段错误.我的代码如下.任何帮助是极大的赞赏.
程序写入磁盘
int main {
struct Student one;
strcpy(one.FullName, "Ernestine Waller");
strcpy(one.CompleteAddress, "824 Larson Drv, Silver Spring, MD 20910");
one.Gender = 'F';
one.LivesInASingleParentHome = true;
one.grades.push_back(80);
one.grades.push_back(90);
ofstream ofs("fifthgrade.ros", ios::binary);
ofs.write((char *)&one, sizeof(one));
ofs.close();
}
Run Code Online (Sandbox Code Playgroud)
程序从磁盘读取
int main {
struct Student *two = (struct Student *) malloc(sizeof(struct Student));
ifstream ifs("fifthgrade.ros", ios::binary);
//cout << "Size of struct: " << size << endl;
ifs.read((char *)two, sizeof(struct Student));
cout << "Student Name: " << two->FullName << endl;
cout << "First Grade: " << …Run Code Online (Sandbox Code Playgroud) 我会通过C++套接字发送一个结构.这是一个示例结构:
struct PIPPO
{
int x;
int y;
};
Run Code Online (Sandbox Code Playgroud)
我使用:
PIPPO test2;
test2.x = 10;
test2.y = 20;
Run Code Online (Sandbox Code Playgroud)
我有上面的代码序列化并通过套接字发送它.问题是,如果我尝试获取测试变量的HEX值,我只看到0A并且在接收数据的另一台计算机上实际上我无法将二进制数据转换回结构.有人能帮我吗?
template <class T> void SerializeData(char *outputArray, T inputData)
{
memcpy(outputArray, &inputData, sizeof(inputData));
}
char *StrToHexStr(char *str)
{
char *newstr = new char[(strlen(str)*2)+1];
char *cpold = str;
char *cpnew = newstr;
while('\0' != *cpold) {
sprintf(cpnew, "%02X", (char)(*cpold++));
cpnew+=2;
}
*(cpnew) = '\0';
return(newstr);
}
char *test = new char[sizeof(PIPPO)];
memcpy((void *)&test, (void *)&test2, sizeof(test2));
send(this->m_socket, test, strlen(test), 0);
Run Code Online (Sandbox Code Playgroud)