通過std::string轉儲結構體資料
阿新 • • 發佈:2019-01-07
在一些需要將結構體儲存起來,稍後再取出使用的情況,可以將結構體存入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]);