了解配置(Protobuf)的获取和设置功能,明白序列化与反序列化的意义(2天)
- Protobuf是Google开源的一种可用于结构化数据串行化(序列化)的数据缓存格式,适用于数据存储以及RPC数据交换格式。上网查询Protobuf相关资料后再进行下面过程。我司使用的是proto3。
- 相关官方文档:
-
- Language Guide (proto3)
- Protocol Buffer Basics: C++
- 输入IP地址登陆IE端,在设备信息->版本信息内,将系统版本的显示字符串改成显示数字。调用函数为main.cpp中的xxxx()。
- 数字默认从0开始,每调用一次函数自加1(即每点击一次设备信息)。
- 实现文本框中值的保存,设备重启后要从上次的值继续。(全局可能有多个地方调用此函数,不需要保证值的精确)。
-
- 提示:在xxxx/xxxx/下创建一个新的proto文件,在其中增加一项新的配置。在xxxx/xxxx/xxxx.mk中的xxxx链入新的proto文件。配置使用可以参考xxxx/xxxx/xxxx/xxxx/xxxx/xxxx.cc。
- 要求:必须使用抽象类xxxx提供的接口来实现,头文件位于xxxx/xxxx/xxxx/xxxx/xxxx.h。
//.proto代码 //后面的是.proto 大概的意思,各个参数不一样 这样助于理解
//cyf就是个变量名,知道我的懂得都懂
syntax = "proto3";
option optimize_for = CODE_SIZE;
package motupb.config;
message Cyf{
int32 click_num = 1;
bool local = 2;
}
message NumCyf{
Cyf cyf_1 = 1;
// Cyf cyf_2 = 2;
}
//class NumCyf{
// class Cyf(){
// int32 click_num = 0;
// }cyf_1;
// class Cyf{
// int32 click_num = 0;
// }cyf_2;
//}
//main.cc下的 要求在这里写的代码
std::string GetSoftwareVersion() {
release_version_t version;
motupb::config::Cyf cyf_1;
static bool is_first = true;
if(is_first){
if(!g_ConfigInterface.SetDefault("NumCyf.cyf_1",cyf_1))
printf("设置默认配置失败!n");
// if(!g_ConfigInterface.GetDefault("NumCyf.cyf_1", cyf_1))
// printf("获取默认配置失败!n");
}
g_ConfigInterface.GetConfig("NumCyf.cyf_1", cyf_1);
cyf_1.set_click_num(cyf_1.click_num() + 1);
if(cyf_1.click_num()>=100)
cyf_1.clear_click_num();
release_get_version(&version);
char softversion[64]{};
snprintf(softversion, sizeof(softversion), "%d",cyf_1.click_num());
if(!g_ConfigInterface.SetConfig("NumCyf.cyf_1",cyf_1))
printf("设置本地配置失败!n");
is_first = false;
return softversion;