免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123
最近访问板块 发新帖
楼主: idi0t
打印 上一主题 下一主题

[C] 请教,需要将C结构体序列化时你们是怎么做的? [复制链接]

论坛徽章:
0
21 [报告]
发表于 2015-11-25 22:31 来自手机 |只看该作者
看不懂

论坛徽章:
36
CU大牛徽章
日期:2013-09-18 15:24:20NBA常规赛纪念章
日期:2015-05-04 22:32:03牛市纪念徽章
日期:2015-07-24 12:48:5515-16赛季CBA联赛之辽宁
日期:2016-03-30 09:26:4715-16赛季CBA联赛之北控
日期:2016-03-30 11:26:2315-16赛季CBA联赛之广夏
日期:2016-05-20 15:46:5715-16赛季CBA联赛之吉林
日期:2016-05-24 11:38:0615-16赛季CBA联赛之青岛
日期:2016-05-30 13:41:3215-16赛季CBA联赛之同曦
日期:2016-06-23 16:41:052015年亚洲杯之巴林
日期:2015-02-03 15:05:04CU大牛徽章
日期:2013-09-18 15:24:52CU十二周年纪念徽章
日期:2013-10-24 15:46:53
22 [报告]
发表于 2015-11-26 11:51 |只看该作者
回复 13# yulihua49


    你说模板有自动半自动的生成器,是怎么实现的?哪里有?(上不了QQ,除了群其它地方有吗)

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
23 [报告]
发表于 2015-11-26 12:55 |只看该作者
本帖最后由 yulihua49 于 2015-11-26 12:58 编辑

回复 22# idi0t
我这里有,可是粘连了不少乱七八糟的模块。
我这发帖页面没有上传文件的按钮。


   

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
24 [报告]
发表于 2015-11-26 13:02 |只看该作者
本帖最后由 yulihua49 于 2015-11-26 13:12 编辑

sdbc7_linux_ora_rt.tar.gz (5.74 MB, 下载次数: 5)
解开后,在bin下有mktpl。可用。
源码在demo/mkpatt
可以编译。这个包带编译环境(库,include)。

生成模板后还要用这个库里的函数来处理。

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
25 [报告]
发表于 2015-11-26 13:06 |只看该作者
本帖最后由 yulihua49 于 2015-11-26 13:43 编辑

DAU7.zip (23.63 KB, 下载次数: 7)
文档。
cd demo/mkpatt/meta
$ cat st.meta
TEMPLATE st 2
c:=CH_TINY
bi:=CH_INT64
]$ mktpl
输入元数据文件名: st.meta

T_PkgType st_tpl[]={
        {CH_TINY,1,"c",0,-1},
        {CH_INT64,sizeof(INT64),"bi"},
        {-1,0,0,0}
};

extern T_PkgType st_tpl[];
typedef struct {
        char c;
        INT64 bi;
} st_stu;

  1. $ vi t_struct.c
  2. #include <pack.h>
  3. #include <json_pack.h>

  4. #include "meta/st.tpl"
  5. #include "meta/st.stu"

  6. main()
  7. {
  8. ss_stu ss;
  9. char buf[512];
  10. JSON_OBJECT json=json_object_new_object();

  11.    ss.c=1;
  12.    ss.s.c=3;
  13.    ss.s.bi=123456789012345;
  14.    ss.i=12345;
  15.         struct_to_json(json,&ss,ss_tpl,NULL);
  16.         printf("json ss=%s\n",json_object_to_json_string(json));
  17.         net_pack(buf,&ss,ss_tpl);
  18.         printf("ss=%s\n",buf);

  19.    json_object_put(json);
  20.    return 0;
  21. }
  22. ~
  23. ~
  24. ~
  25. [sdbc@erg0devprc01 mkpatt]$ make t_struct
  26. cc -O3 -m64 -w -I/home/sdbc/sdbc/include   -c -o t_struct.o t_struct.c
  27. cc -m64 -o t_struct t_struct.o -L/home/sdbc/sdbc/lib -L/app/oracle/product/11.2.0/client/lib -lscbase -ljson
  28. [sdbc@erg0devprc01 mkpatt]$ ./t_struct
  29. json ss={ "c": "1", "s": { "c": "3", "bi": "123456789012345" }, "i": "12345" }
  30. ss=1|3|123456789012345|12345|
  31. [sdbc@erg0devprc01 mkpatt]$
复制代码
一个结构套结构的模板的例子。
$ cat meta/st.tpl

T_PkgType st_tpl[]={
        {CH_TINY,1,"c",0,-1},
        {CH_INT64,sizeof(INT64),"bi"},
        {-1,0,0,0}
};

T_PkgType ss_tpl[]={
        {CH_TINY,1,"c",0,-1},
        {CH_STRUCT,0,"s",(const char *)st_tpl},
        {CH_INT,sizeof(int),"i"},
        {-1,0,0,0}
};
[sdbc@erg0devprc01 mkpatt]$ cat meta/st.stu

extern T_PkgType st_tpl[];
typedef struct {
        char c;
        INT64 bi;
} st_stu;

extern T_PkgType ss_tpl[];
typedef struct {
        char c;
        st_stu s;
        int i;
} ss_stu;


struct_to_json()和net_pack()都是泛型函数。他们按照ss_tpl的指示行事。
33或34行的那个玩意儿就可以在网上传送啦。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP