免费注册 查看新帖 |

Chinaunix

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

[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 [报告]
发表于 2013-11-25 16:29 |只看该作者
本帖最后由 yulihua49 于 2013-11-25 16:32 编辑
u010402865 发表于 2013-11-25 16:27
非边界数据?结构体没有边界?

就是:
short,必须在偶数字节。
int,必须4字节对齐
64bit long 必须8字节对齐。。。。。。
违背这个要求就是非边界存取。
还有大小头问题呢,不同CPU不同。
还有长度,有的int是16bit,有的32bit。
有的long 32bit,有的64bit。
double,有64bit,有80bit,有128bit,格式也有不同,这些我都见过。

论坛徽章:
0
22 [报告]
发表于 2013-11-25 16:32 |只看该作者
yulihua49 发表于 2013-11-25 16:29
就是:
short,必须在偶数字节。
int,必须4字节对齐

也就时说在这些系统上写C程序,用#pragma pack不起作用了?

论坛徽章:
0
23 [报告]
发表于 2013-11-25 16:34 |只看该作者
yulihua49 发表于 2013-11-25 16:29
就是:
short,必须在偶数字节。
int,必须4字节对齐


如果是这样,用反射不也要做系统区别对待么?

论坛徽章:
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 [报告]
发表于 2013-11-25 16:38 |只看该作者
u010402865 发表于 2013-11-25 16:32
也就时说在这些系统上写C程序,用#pragma pack不起作用了?

起作用。你看17楼,续写的。
会坏事。

论坛徽章:
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 [报告]
发表于 2013-11-25 16:40 |只看该作者
本帖最后由 yulihua49 于 2013-11-25 16:42 编辑
u010402865 发表于 2013-11-25 16:34
如果是这样,用反射不也要做系统区别对待么?

是的。
反射时就告诉你,每个变量的类型、长度、位置等等,你按照这个参数找变量就不会错。
同一个结构在不同系统里反射出的参数不同,你按参数指示操作。

论坛徽章:
0
26 [报告]
发表于 2013-11-25 16:41 |只看该作者
yulihua49 发表于 2013-11-25 16:38
起作用。你看17楼,续写的。
会坏事。

看了,没看明白你说的啥,针对LZ的问题,用我说的方法会有什么问题?

论坛徽章:
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
27 [报告]
发表于 2013-11-25 16:43 |只看该作者
本帖最后由 yulihua49 于 2013-11-25 16:44 编辑
u010402865 发表于 2013-11-25 16:41
看了,没看明白你说的啥,针对LZ的问题,用我说的方法会有什么问题?

就是在系统间不可移植。
X86写的文件,传到IBM,读不出来。因为是CPU结构相关数据,必须相同CPU才能处理。

论坛徽章:
0
28 [报告]
发表于 2013-11-25 16:43 |只看该作者
yulihua49 发表于 2013-11-25 16:40
是的。
反射时就告诉你,每个变量的类型、长度、位置等等,你按照这个参数找变量就不会错。

既然都逃不掉系统区别对待, 写C程序时也同样做是了,没什么啊。

论坛徽章:
0
29 [报告]
发表于 2013-11-25 16:44 |只看该作者
yulihua49 发表于 2013-11-25 16:43
就是在系统间不可移植。
X86写的文件,传到IBM,读不出来。

都是纯粹的二进制文件,怎么读不出来?

论坛徽章:
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
30 [报告]
发表于 2013-11-25 16:49 |只看该作者
本帖最后由 yulihua49 于 2013-11-25 16:56 编辑
u010402865 发表于 2013-11-25 16:43
既然都逃不掉系统区别对待, 写C程序时也同样做是了,没什么啊。

不行啊,我们的业务都是:
在X86:

net_pack(buf,&struct,tpl);  //序列化,这里是X86的struct
他按自己的结构布局取出数据。buf里是:.....|.....|....|...|  的格式。
fprintf(fd,"%s\n",buf)   //to file


transfer  to spark solaris


fgets(buf);  //get from file

net_dispack(&struct,buf,tpl);//反序列化,这里是spark的struct了。
它按自己的结构布局装填struct。

明白吗?
你那么玩,绝对死菜。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP