在一些需要将结构体存储起来,稍后再取出使用的情况,可以将结构体存入std::string中,之后再取出。
这样的好处是:
①可以支持多种结构类型
②临时存储信息的数据结构不需要随着结构体变化同步变化,避免了修改结构体时忘记修改存储逻辑而导致的数据丢失问题
struct stTest
{
stTest()
{
nType = 0;
bBoo1 = false;
bBoo2 = false;
nID = 0;
nTest = 0;
nNum = 0;
}
int nSize()
{
return sizeof(*this) + nNum * sizeof(data[0]);
}
unsigned char nType;
bool bBoo1;
bool bBoo2;
unsigned int nID;
int nTest;
int nNum;
char data[0];
};
char buffer[1024];
memset(buffer, 0, 1024);
stTest *stt = (stTest *)((char*)&buffer[0]);
stt->nTest = 1;
stt->bBoo1 = false;
stt->bBoo2 = true;
stt->nID = 32222;
stt->nNum = 0;
for(char i = 0; i < 32; ++i)
{
stt->data[stt->nNum++] = i + 102;
}
//存入数据
std::string strTest = "";
strTest.append(buffer, stt->nSize());
//取出数据
char bufferNew[1024];
memset(bufferNew, 0, 1024);
memcpy(bufferNew, strTest.c_str(), strTest.length());
stTest *sttNew = (stTest *)((char*)&bufferNew[0]);