2016-07-27 24 views
0

我是protobufs的新手,嘗試一些簡單的序列化和反序列化。SerializeToArray protobuf沒有存儲

int sizeArray  = event0.ByteSize(); 
QByteArray * qbArray = new QByteArray[sizeArray]; 

cout << "byteSizeOfEvent0:  " << sizeArray    << endl;  
cout << "preSTA size:   " << qbArray->size()  << endl; 
cout << "is event0 initialized? " << event0.IsInitialized() << endl; 

event0.SerializeToArray(qbArray, sizeArray); 

cout << "postSTA size: " << qbArray->size() << endl; 

產生的結果

byteSizeOfEvent0:  48 
preSTA size:   0 
is event0 initialized? 1 
The program has unexpectedly finished. 

呼籲qbArray SerializeToArray是導致飛機墜毀後的過程中,我認爲由於數據的寫入失敗。使用SerializeAsString和deBugging時,事件被初始化並顯示正確。

我看過其他職位serializeToArray以同樣的方式。我在做什麼明顯錯誤?

任何幫助表示讚賞。 謝謝!

回答

0

new QByteArray[sizeArray]分配的sizeArrayQByteArray S,不是sizeArray字節長QByteArray陣列。如果你想使用QByteArray,這應該是這個樣子然而

int sizeArray = event0.ByteSize(); 
QByteArray qbArray(sizeArray, 0); 

cout << "byteSizeOfEvent0:  " << sizeArray    << endl;  
cout << "preSTA size:   " << qbArray.size()   << endl; 
cout << "is event0 initialized? " << event0.IsInitialized() << endl; 

event0.SerializeToArray(qbArray.data(), sizeArray); 

cout << "postSTA size: " << qbArray.size() << endl; 

注意的是,這兩個size()調用都將返回同樣的事情,因爲qbArray被初始化爲sizeArray字節長。

+0

感謝您的幫助! – NeutralA