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.
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 –