2016-05-16 5 views
0

Ich habe heruntergeladen 1.4.1 und suchte alle Beispiele, Wiki und auf Google als auch aber konnte nichts finden, also hier.Packen/Entpacken C-Style-Arrays mit Msgpack

Gibt es eine Möglichkeit, dass ich Arrays mit dem Datentyp char, std :: string, benutzerdefinierte Klasse packen/entpacken kann?

char data[10]; 
std::string data2[10]; 
UserClass data3[20]; 

Ich habe versucht, es für std :: string Array, aber konnte es nicht funktionieren.

Ich portiere meinen Code von Boost :: Serialisierungsbibliothek zu MsgPack. Ich werde jede Hilfe schätzen.

Dank & Grüße, Owais.

+0

Ich habe die Pull-Anforderung an msgpack-c gesendet, um das C-Style-Array zu unterstützen. Siehe https://github.com/msgpack/msgpack-c/issues/465 –

Antwort

0

Leider msgpack-c Version 1.4.1 hat keine Funktionalität, die C-Style-Array packen/entpacken. Die einzige Ausnahme ist das C-Style-Array von char. Es ist als STR verpackt (https://github.com/msgpack/msgpack/blob/master/spec.md#formats-str).

Vielleicht ist es nicht das Verhalten, das Sie erwartet haben.

msgpack-c Version 2.0 unterstützt das Packen/Entpacken des C-Style-Arrays. Es wurde bereits auf master Zweig unterstützt. Siehe https://github.com/msgpack/msgpack-c/pull/466

Es kann alle folgenden Variablen packen/entpacken:

char data[10]; 
std::string data2[10]; 
UserClass data3[20]; 

Sehen Sie ein Arbeits komplettes Beispiel: http://melpon.org/wandbox/permlink/20WTgAATDhTX3rBA

Ein Array von std :: string und eine Reihe von Userclass sein kann übergeben an msgpack::pack und msgpack::object::convert. Es ist einfach.

// Packing 
std::stringstream ss; 
std::string data2[2] = { "ABC", "DEFG" }; 
msgpack::pack(ss, data2); // As ARRAY 

// Unpacking 
auto oh2 = msgpack::unpack(ss.str().data(), ss.str().size(), off); 

// Converting 
std::string c_data2[2]; 
oh2.get().convert(c_data2); 

Aber ein Array von Char ist als STR als Standard verpackt. Wenn Sie es als ARRAY packen möchten, müssen Sie msgpack::type::array_ref verwenden. Der Einfachheit halber wird die msgpack::type::make_array_ref-Funktion bereitgestellt, um msgpack::type::array_ref zu erstellen.

std::stringstream ss; 
char data1[3] = { 'A', 'B', '\0' }; 

// Packing 
msgpack::pack(ss, msgpack::type::make_array_ref(data1)); // As ARRAY 

// Unpacking 
auto oh1_array = msgpack::unpack(ss.str().data(), ss.str().size(), off); 

// Converting 
char c_data1_array[3]; 
auto ar = msgpack::type::make_array_ref(c_data1_array); 
oh1_array.get().convert(ar); 

Hier ist eine Zuordnung zwischen C-Stype Array und msgpack Typen.

char[]   : STR 
unsigned char[] : BIN 
T[]    : ARRAY (T means all other types.) 

Also, wenn Sie char[] und unsigned char[] zu ARRAY zuordnen möchten, müssen Sie msgpack::type::array_ref verwenden.

Verwandte Themen