0
点赞
收藏
分享

微信扫一扫

protobuf-c xml 互转

目前已经完成xml 和protobuf-c 相互转换的逻辑;示例代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>

#include "xml2pb_help.h"
#include "test.pb-c.h"

static void init_adam(Modetype *alltype)
{
alltype->enum_field1 = MODETYPE__ENUM_TYPE_E__ENUM_A;
alltype->n_enum_field2 = 1;
alltype->enum_field2 = malloc(sizeof(Modetype__EnumTypeE));
alltype->enum_field2[0] = MODETYPE__ENUM_TYPE_E__ENUM_B;

alltype->int32_field = 3213;
alltype->n_int32_field2 = 2;
alltype->int32_field2 = malloc(sizeof(int32_t) * 2);
alltype->int32_field2[0] = -245;
alltype->int32_field2[1] = 20;

alltype->int64_field = -3332;
alltype->n_int64_field2 = 1;
alltype->int64_field2 = malloc(sizeof(int64_t));
alltype->int64_field2[0] = 33432;


alltype->float_field = 32.32f;
alltype->n_float_field2 = 1;
alltype->float_field2 = malloc(sizeof(float));
alltype->float_field2[0] = -4332.32f;


alltype->bool_field = 1;
alltype->n_bool_field2 = 1;
alltype->bool_field2 = malloc(sizeof(protobuf_c_boolean));
alltype->bool_field2[0] = 0;

static Submsg submsg = SUBMSG__INIT;
static char str1[32] = "waf_test_str1";
static char str2[32] = "waf_waf_test_str2";
static char *str_p[2];
submsg.n_string_field = 2;
submsg.string_field = str_p;
submsg.string_field[0] = str1;
submsg.string_field[1] = str2;
alltype->submsg_field = &submsg;


alltype->has_opt_ipv41 = 1;
alltype->opt_ipv41 = 0x4e0a430a;

alltype->n_rep_ipv42 = 1;
alltype->rep_ipv42 = malloc(32);
alltype->rep_ipv42[0] = 0x20204847;

alltype->has_opt_u32 = 1;
alltype->opt_u32 = 111111;
}

static void free_adam(Modetype *alltype)
{
if (alltype) {
free(alltype->enum_field2);
free(alltype->int32_field2);
free(alltype->int64_field2);
free(alltype->float_field2);
free(alltype->bool_field2);
free(alltype->rep_ipv42);
}
}
//pack_xml_file_to_protobuf
//pack_protobuf_to_xml_file
int main(int argc, char *argv[])
{
Modetype *ptest = NULL;
Modetype alltype = MODETYPE__INIT;
init_adam(&alltype);

int ret = pack_protobuf_to_xml_file((const ProtobufCMessage*)&alltype,
"./test1_new.xml", NULL);
printf("ret = %d\n", ret);
if (ret != 0) {
goto error;
}

ret = pack_xml_file_to_protobuf("./test1_new.xml", &modetype__descriptor,
(ProtobufCMessage**)&ptest, NULL);
printf("ret = %d\n", ret);
if (ret != 0) {
goto error;
}
ptest->int64_field = 77777;
ptest->opt_u32 = 99999;
ptest->has_opt_u32 = 1;
strcpy_n(ptest->submsg_field->string_field[0], strlen(ptest->submsg_field->string_field[0]), "hello word");

ret = pack_protobuf_to_xml_file((const ProtobufCMessage*)ptest,
"./test2_test.xml", NULL);
printf("ret = %d\n", ret);

free_adam(&alltype);
modetype__free_unpacked(ptest,NULL);
return 0;
error:
free_adam(&alltype);
return -1;
}

目前 对外提供的接口为:

pack_protobuf_to_xml_file: protobuf 数据写入到xml
pack_xml_file_to_protobuf:读取xml 数据转换为protobuf序列化

测试结果为:

protobuf-c xml 互转_相互转换

 

 protobuf-c xml 互转_#include_02

 

 

  目前测试结果显示已经完成了protobuf xml 相互转换的封装!

  后续继续编写json到protobuf的互转

 

http代理服务器(3-4-7层代理)-网络事件库公共组件、内核kernel驱动 摄像头驱动 tcpip网络协议栈、netfilter、bridge 好像看过!!!! 但行好事 莫问前程 --身高体重180的胖子

举报

相关推荐

0 条评论