xiaoliuzi / user_demo

1 stars 0 forks source link

根据msgpack spec解析协议 #71

Closed xiaoliuzi closed 8 years ago

xiaoliuzi commented 8 years ago

根据如下代码

#include<stdio.h>
#include<msgpack.h>

int main(void)
{
    msgpack_sbuffer sbuf;
    msgpack_packer pk;
    msgpack_zone mempool;
    msgpack_object deserialized;

    /* msgpack::sbuffer is a simple buffer implementation. */
    msgpack_sbuffer_init(&sbuf);

    /* serialize values into the buffer using msgpack_sbuffer_write callback function. */
    msgpack_packer_init(&pk, &sbuf, msgpack_sbuffer_write);

    msgpack_pack_array(&pk, 3);
    msgpack_pack_int(&pk, 1);
    msgpack_pack_true(&pk);
    msgpack_pack_str(&pk, 7);
    msgpack_pack_str_body(&pk, "example", 7);

    print(sbuf.data, sbuf.size);

}

编译运行后 有如下输出

93 01 c3 a7 65 78 61 6d 70 6c 65

93:为array类型,9为array类型,3为array长度 01:数组下标 c3:true a7:a为string类型,7为string长度 65:在asscii字符集中,字符e的十进制为101,二进制为0110 0101,十六进制为65. ...

Reference: https://github.com/msgpack/msgpack/blob/master/spec.md#formats-array

starwing commented 8 years ago

谁跟你说01是数组下标的????

长度为3的数组,后面的1,true和字符串分别是三个元素,亲……

xiaoliuzi commented 8 years ago

搞错了。。。

以为01就是数组的第一个元素了。。。。

starwing commented 8 years ago

可是,01就是数组的第一个元素啊= =

xiaoliuzi commented 8 years ago

这么说,[01,true,example]这样整体作为一个元组,然后这个元组其实是数组的第一个元素,而这里的01相当于一个编号的作用?

xiaoliuzi commented 8 years ago

好像也没有理解对,应该是: 数组长度为3, 01是这个数组的第一个元素, true是这个数组的第二个元素, 字符串example是这个数组的第三个元素。