残念ながら、msgpack-cバージョン1.4.1には、Cスタイルの配列をパック/アンパックする機能はありません。唯一の例外はcharのC-Style配列です。これはSTR(https://github.com/msgpack/msgpack/blob/master/spec.md#formats-str)として梱包されています。
多分あなたの期待した動作ではありません。
msgpack-cバージョン2.0は、pack/unpack Cスタイルの配列をサポートします。既にmaster
支店でサポートされています。 http://melpon.org/wandbox/permlink/20WTgAATDhTX3rBA
のstd ::文字列の配列とUserClassの配列を指定できます作業の完全な例を参照してください
char data[10];
std::string data2[10];
UserClass data3[20];
:https://github.com/msgpack/msgpack-c/pull/466
それは/パック以下の変数のすべてを解凍することができます参照してください。 msgpack::pack
とmsgpack::object::convert
に渡されます。それは簡単です。
// 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);
しかし、charの配列はデフォルトとしてSTRとしてパックされています。 ARRAYとしてパックしたい場合は、msgpack::type::array_ref
を使用する必要があります。便宜上、msgpack::type::make_array_ref
関数を用意してmsgpack::type::array_ref
を作成します。
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);
ここでは、C-Stype配列とmsgpackタイプの間のマッピングを示します。あなたがARRAYにchar[]
とunsigned char[]
をマッピングしたいとき
char[] : STR
unsigned char[] : BIN
T[] : ARRAY (T means all other types.)
だから、あなたはmsgpack::type::array_ref
を使用する必要があります。
Cスタイルの配列をサポートするためにmsgpack-cにプルリクエストを投稿しました。 https://github.com/msgpack/msgpack-c/issues/465をご覧ください。 –