1. 程式人生 > >通過std::string轉儲結構體資料

通過std::string轉儲結構體資料

在一些需要將結構體儲存起來,稍後再取出使用的情況,可以將結構體存入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]);