c/c++语言开发共享MessagePack C API

在查看MessagePack的C API时,有许多函数可以根据类型适当地序列化(打包)数据: msgpack_pack_uint8msgpack_pack_int32 ,…

在API中似乎没有等效的调用来解压缩数据。 msgpack_unpack_next返回一个msgpack_object 。 这些对象仅具有粗粒度类型(类型中最大的:int64,double,…),基于所包含的枚举。

我在这里错过了什么吗? 是期望使用粗物体然后再投射?

如何正确拆包?

此外,有没有好的文档或用法示例? 网站上的内容很简单。

    在解包时,任何整数值总是作为固定宽度的64位整数存储在msgpack_object中(如果为负,则为int64_t ,否则为uint64_t )。

    有关msgpack_object等人和cpp/src/msgpack/unpack.c更多详细信息,请参阅cpp/src/msgpack/object.h ,以了解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; } } 

    这是因为在打包时,msgpack动态选择根据其值对整数进行编码的最佳方式,例如,如果使用msgpack_pack_uint16打包整数,则:

    有关更多详细信息,请参阅cpp/src/msgpack/pack_template.h


    换句话说,在解包时,msgpack使用足够大的正或负(测试obj.type是否为MSGPACK_OBJECT_POSITIVE_INTEGERMSGPACK_OBJECT_NEGATIVE_INTEGER )来保存任何整数值。 所以由你决定:

    最后,C测试套件( msgpack/cpp/test/msgpackc_test.cpp )可能有助于浏览代码示例。

      以上就是c/c++开发分享MessagePack C API相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/560502.html

      (0)
      上一篇 2021年1月28日
      下一篇 2021年1月28日

      精彩推荐