CNK*_*CNK 1 c messagepack msgpack
在着眼于C API为MessagePack,有多个功能以适当地串行化(包)中的数据,根据类型:msgpack_pack_uint8,msgpack_pack_int32,...
在API中似乎没有相应的调用来解压缩数据. msgpack_unpack_next返回一个msgpack_object.这些对象仅具有粗粒度类型(类型中最大的:int64,double,...),基于所包含的枚举.
我在这里错过了什么吗?是期望使用粗物体然后再施放?
如何正确拆包?
此外,有没有好的文档或用法示例?网站上的那些是微不足道的.
在解包时,任何整数值始终存储在msgpack_object固定宽度的64位整数中(int64_t否则为负数uint64_t).
有关et al.的cpp/src/msgpack/object.h更多详细信息msgpack_object,cpp/src/msgpack/unpack.c请参阅以及查看msgpack如何处理解包逻辑,例如:
static inline int template_callback_int8(unpack_user* u,
int8_t d,
msgpack_object* o) {
if(d >= 0) {
o->type = MSGPACK_OBJECT_POSITIVE_INTEGER; o->via.u64 = d;
return 0;
}
else {
o->type = MSGPACK_OBJECT_NEGATIVE_INTEGER; o->via.i64 = d;
return 0;
}
}
Run Code Online (Sandbox Code Playgroud)
这是因为在打包时,msgpack动态地选择根据其值对整数进行编码的最佳方式,例如,如果您使用msgpack_pack_uint16打包整数,则:
见msgpack_pack_real_uint16从cpp/src/msgpack/pack_template.h更多的细节.
在解包时换句话说,msgpack使用一个足够大的正或负的(如果测试obj.type是MSGPACK_OBJECT_POSITIVE_INTEGER或MSGPACK_OBJECT_NEGATIVE_INTEGER)持有的任何整数值.所以由你来决定:
int64_t或uint64_t.最后,C测试套件(msgpack/cpp/test/msgpackc_test.cpp)可能有助于浏览代码示例.
| 归档时间: |
|
| 查看次数: |
3599 次 |
| 最近记录: |