close

來記錄一下這次搞了我一點時間的message pack

http://msgpack.org

 

簡單來說就是一個更簡易binary pack 數據的方式,會依照data type,來決定怎麼包

簡單的就用header+content 合成一組pack,比較長的數據就header一組+content一組pack起來

詳細可以從網站裡面的pack看出來

 

接下來提供幾個pack的例子

 

1.作業的test sample 第一個值是integral ,以format 來說

positive fixint

0xxxxxxx

0x00 - 0x7f

 

positive fixnum stores 7-bit positive integer

+--------+

|0XXXXXXX|

+--------+

所以 3 pack起來是00000011,只會有一組數值

 

2.而如果值是20000,以format 來說

uint 16

11001101

0xcd

uint 16 stores a 16-bit big-endian unsigned integer

+--------+--------+--------+

|  0xcd  |ZZZZZZZZ|ZZZZZZZZ|

+--------+--------+--------+

 

pack起來是 11001101      0100111000100000

                 header            content

 

3.如果是array 或是vector container 存16bits值 ,那 format

array 16

11011100

0xdc

 

array 16 stores an array whose length is upto (2^16)-1 elements:

+--------+--------+--------+~~~~~~~~~~~~~~~~~+

|  0xdc  |YYYYYYYY|YYYYYYYY|    N objects    |

+--------+--------+--------+~~~~~~~~~~~~~~~~~+

array16 就是 header 11011100  之後就可以接連續數值了

如果是{3,3,5,4} 那就換成    00000011 00000011 00000101 00000100 這樣

 

 

function pack()  call 一次pack包一組,unpack() 時也是call 一次 unpack 一組

大致是這樣,然後這次發現sstream處理速度沒有fstream快

然後這次也是第一次使用boost c++的 library,之前寫sorting時就想用了,不過就只是觀望,沒想到這次作業直接教怎麼用,太好啦~

沒有想像中難,下載library zip下來後,c++檔案裡面include ,compile的時候提供路徑就可以解決了

不想每次compile 都一大串,寫個makefile會更容易

 

 

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 angledark0123 的頭像
    angledark0123

    CONY的世界

    angledark0123 發表在 痞客邦 留言(0) 人氣()