prophy:快速序列化协议
proph的Python项目详细描述
prophy是一个静态类型的、二进制的、无标记的、未打包的序列化协议。
您可以定义消息架构:
struct MyMsg { u16 x<>; };
为所选语言生成编解码器:
prophyc --python_out . --cpp_full_out . --cpp_out . test.prophy
并在python中序列化数据:
>>> import test >>> msg = test.MyMsg() >>> msg.x[:] = [1, 2, 3] >>> msg.encode('<') '\x03\x00\x00\x00\x01\x00\x02\x00\x03\x00\x00\x00' >>> print msg x: 1 x: 2 x: 3C++中的P>:
#include <iostream> #include <iterator> #include "test.ppf.hpp" int main() { prophy::generated::MyMsg msg{{1, 2, 3}}; std::vector<uint8_t> data = msg.encode(); std::copy(data.begin(), data.end(), std::ostream_iterator<unsigned>(std::cout, " ")); std::cout << '\n' << msg.print(); return 0; }
3 0 0 0 1 0 2 0 3 0 0 0 x: 1 x: 2 x: 3
再次在C++中(半手翻滚,依赖于编译器,但最快的选项):
#include <iostream> #include <iterator> #include <cstdlib> #include "test.pp.hpp" int main() { MyMsg* msg = static_cast<MyMsg*>(std::malloc(12)); msg->num_of_x = 3; msg->x[0] = 1; msg->x[1] = 2; msg->x[2] = 3; std::copy((uint8_t*)msg, ((uint8_t*)msg) + 12, std::ostream_iterator<unsigned>(std::cout, " ")); std::cout << '\n'; return 0; }
3 0 0 0 1 0 2 0 3 0 0 0
文档:http://prophy.readthedocs.org
问题:https://github.com/aurzenligl/prophy/issues