來記錄一下這次搞了我一點時間的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會更容易
留言列表