免费注册 查看新帖 |

Chinaunix

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

[C] 该项目已废弃,请管理员删除此贴 [复制链接]

论坛徽章:
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
21 [报告]
发表于 2014-09-02 13:02 |只看该作者
本帖最后由 yulihua49 于 2014-09-02 13:38 编辑
BetonArmEE 发表于 2014-09-02 11:49
是的,对齐问题我原本要处理的,结果又写错了,我的原意是想写成#pragma pack(1)或#pragma pack(

不可以pack。
如果在小型机上,如sparc,rs-6000,HP。。。
经过pack的结构,是不能访问的,只要你动用里边的未对齐变量,立即core dumpped。。。。。。
可以做一个展开器,将网络传来的packed struct展开成正常的结构。我做过这个,挺麻烦的,不如序列化省事。

如果想你的工具通用,必须走 序列化/反序列化  的道路。。。。说的有点武断。道理是对的。
认真看一下17楼的建议。
给你一个例子:
  1. #include <pack.h>
  2. #include <json_pack.h>

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

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

  10.    ss.c=1;
  11.    ss.s.c=3;
  12.    ss.s.bi=123456789012345;
  13.    ss.i=12345;
  14.         stu_to_json(json,&ss,ss_tpl,0,0); //序列化成JSON
  15.         printf("json ss=%s\n",json_object_to_json_string(json));
  16.         net_pack(buf,&ss,ss_tpl);//序列化成 string
  17.         printf("ss=%s\n",buf);

  18.    json_object_put(json);
  19.    return 0;
  20. }
  21. st.stu:(结构文件)
  22. extern T_PkgType st_tpl[];
  23. typedef struct {
  24.         char c;
  25.         INT64 bi;
  26. } st_stu;

  27. extern T_PkgType ss_tpl[];
  28. typedef struct {
  29.         char c;
  30.         st_stu s;
  31.         int i;
  32. } ss_stu;
  33. st.tpl:(模板文件)
  34. T_PkgType st_tpl[]={
  35.         {CH_TINY,1,"c",0,-1},
  36.         {CH_INT64,sizeof(INT64),"bi"},
  37.         {-1,0,0,0}
  38. };

  39. T_PkgType ss_tpl[]={
  40.         {CH_TINY,1,"c",0,-1},
  41.         {CH_STRUCT,0,"s",(const char *)st_tpl},
  42.         {CH_INT,sizeof(int),"i"},
  43.         {-1,0,0,0}
  44. };

复制代码
运行结果:
./t_struct
json ss={ "c": "1", "s": { "c": "3", "bi": "123456789012345" }, "i": "12345" }
ss=1|3|123456789012345|12345|

这就是一个结构套结构的例子。
17-20行,打印整个结构体的值,是不是挺省事的?
如果需要,放到包里传就行了。
反序列化,同样省事。

模板和结构是由工具生成的。
开源。



论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
22 [报告]
发表于 2014-09-02 19:09 来自手机 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
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 [报告]
发表于 2014-09-02 19:32 |只看该作者
本帖最后由 yulihua49 于 2014-09-02 19:34 编辑
BetonArmEE 发表于 2014-09-02 19:09
前面我打的一段话被这个论坛转义了。

如果用#pragma pack(8)呢?^_^

一般说来可以。
但是我还是认为原生态好。
  1.   [code]   和
复制代码
[/code]括起来。

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
24 [报告]
发表于 2014-09-02 19:51 |只看该作者
我都用rpcgen。

论坛徽章:
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 [报告]
发表于 2014-09-02 20:51 |只看该作者
linux_c_py_php 发表于 2014-09-02 19:51
我都用rpcgen。

介绍一下。
我见过XDR,与XDR相似?

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
26 [报告]
发表于 2014-09-02 21:26 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
27 [报告]
发表于 2014-09-02 22:07 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
12
巳蛇
日期:2013-09-16 15:32:242015年辞旧岁徽章
日期:2015-03-03 16:54:152015年亚洲杯之约旦
日期:2015-02-11 14:38:37双鱼座
日期:2015-01-05 11:05:47戌狗
日期:2014-12-08 09:41:18戌狗
日期:2014-08-15 09:29:29双子座
日期:2014-08-05 09:17:17卯兔
日期:2014-06-08 15:32:18巳蛇
日期:2014-01-27 08:47:08白羊座
日期:2013-11-28 21:04:15巨蟹座
日期:2013-11-13 21:58:012015年亚洲杯之科威特
日期:2015-04-17 16:51:51
28 [报告]
发表于 2014-09-03 09:26 |只看该作者
又是这一出。。。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
29 [报告]
发表于 2014-09-03 11:42 来自手机 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
3
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:032015年亚洲杯之中国
日期:2015-04-22 15:52:45
30 [报告]
发表于 2014-09-03 15:32 |只看该作者
其实挺好的, 虽然还不够好, 但有人不需要罢了...分享总是好的, 支持一下.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP