UDP畅聊系统数据的序列化与反序列化

网友投稿 354 2022-10-30


UDP畅聊系统数据的序列化与反序列化

comm中实现基本数据的序列化与反序列化

基于jsoncpp库,由c++编写,用于为网络数据提供序列化及反序列化功能

使用的几个类

Json::Value 可表示所有的类型,int,float,string等

Json::Reader 将json字符串解析到Value中,反序列化,使用Parse函数

Json::Writer 将Value转换成json字符串型,序列化

它的两个子类:Json::FastWriter 和Json::StyledWriter 两种不同的显示风格

Makefile

1 ROOT_PATH=$(shell pwd)   2 INCLUDE=-I$(ROOT_PATH)/lib/include   3 LIB=-L$(ROOT_PATH)/lib/lib   4    5 my_json:my_json.o udp_data.o   6     g++ -o $@ $^ $(LIB)  -ljsoncpp   7 %.o:%.cpp   8     g++ -c $< $(INCLUDE)       9 .PHONY:clean  10 clean:  11     rm -f *.o my_json

my_json中编写序列化与反序列化

my_json.h

1 #include    2 using namespace std;   3 #include "json/json.h"   4 #include    5    6 class my_json   7 {   8 public:   9     my_json();  10     ~my_json();  11     static int serialize(string& _out_str,Json::Value& _out_val);  12     static int deserialize(Json::Value& _val,string& _in_str);  13   14 }; ~

my_json.cpp

1 #include "my_json.h"   2    3 my_json::my_json()   4 {}   5    6 my_json::~my_json()   7 {}   8    9 int my_json::deserialize(Json::Value& _val,string& _in_str)  10 {  11     Json::Reader _read;  12     if(_read.parse(_in_str,_val,false))  13     {  14         return 0;  15     }  16     return -1;  17 }  18 int my_json::serialize(string& _out_str,Json::Value& _out_val)  19 {  20 #ifdef _DEBUG_  21     Json::FastWriter _write;  22     _out_str=_write.write(_out_val);  23 #else  24     Json::StyledWriter _write;  25     _out_str=_write.write(_out_val);  26 #endif  27     return 0;  28 }

udp_data中测试序列化与反序列化

udp_data.h

1 #include    2 using namespace std;   3 #include    4    5 class udp_data   6 {   7 public:   8     udp_data();   9     ~udp_data();  10     void to_string(string& name,string &msg,string& school,string& cmd,strin    g& _out_str);  11     void to_value(string& _out_name,string& out_msg,string& out_school,strin    g& out_cmd,string& in_str);  12 protected:  13     string _name;  14     string _msg;  15     string _school;  16     string _cmd;  17 };

udp_data.cpp

1 #include "udp_data.h"   2 #include "my_json.h"   3 udp_data::udp_data()   4     :_cmd("None")   5 {}   6    7 udp_data::~udp_data()   8 {}   9   10 void udp_data::to_string(std::string& name,std::string& msg,std::string& sch    ool,std::string& cmd,std::string& _out_str)  11 {     12     _name=name;  13     _msg=msg;  14     _school=school;  15     _cmd=cmd;  16     Json::Value root;  17     root["_name"]=_name;  18     root["_msg"]=_msg;  19     root["_school"]=_school;  20     root["_cmd"]=_cmd;  21     my_json::serialize(_out_str,root);  22 }  23   24 void udp_data::to_value(std::string& out_name,std::string& out_msg,std::stri    ng& out_school,std::string& out_cmd,std::string& in_str)  25 {  26     Json::Value val;  27     my_json::deserialize(val,in_str);  28     out_name=val["_name"].asString();  29     out_msg=val["_msg"].asString();  30     out_school=val["_school"].asString();  31     out_cmd=val["_cmd"].asString();  32     _name=out_name;  33     _msg=out_msg;  34     _school=out_school;  35     _cmd=out_cmd;  36 }  37   38   39 int main()  40 {  41 //  string out_str;  42     udp_data _data;  43 //  string name="xiaozhi";  44 //  string msg="hello world";  45 //  string school="XPU";  46 //  string cmd="None";  47 //  _data.to_string(name,msg,school,cmd,out_str);  48 //  cout<

序列化运行结果:

反序列化运行结果:


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:java实现简单的猜数字小游戏
下一篇:java实现猜拳游戏试题
相关文章

 发表评论

暂时没有评论,来抢沙发吧~