免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3703 | 回复: 9

[C] 大端与小端 [复制链接]

论坛徽章:
0
发表于 2009-03-05 08:37 |显示全部楼层
5可用积分
从PC上传输结构体到PowerPC上,结构体是以一字节对齐的,由于PC上是小端,PowerPC上是大端,PowerPC解析数据时发生不正确
typedef struct
{
    unsigned short nLen;
    unsigned short nType;
    char  pNext[1];
} MSG_HEADER,*PMSG_HEADER;
各位有什么好的高招?

论坛徽章:
323
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
发表于 2009-03-05 08:52 |显示全部楼层
用函数htonl htons ntohl ntohs

论坛徽章:
2
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:11
发表于 2009-03-05 09:00 |显示全部楼层
传输时应该遵循网络程序的惯例,即发送时将非字节域转换为网络字节序,接收时将非字节域转换为本机字节序。

论坛徽章:
2
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:11
发表于 2009-03-05 09:04 |显示全部楼层
还应该注意字节对齐问题。

论坛徽章:
1
天蝎座
日期:2013-08-25 10:27:22
发表于 2009-03-05 09:05 |显示全部楼层
格式化成字符串。。
要保持两端结构体对齐一致。

论坛徽章:
1
天蝎座
日期:2013-08-25 10:27:22
发表于 2009-03-05 09:11 |显示全部楼层
或者在格式化时
打包函数将结构体紧凑连接成字符串;解包函数对应。

这样结构体对齐都不用考虑了。

这种要注意:类型大小两端要一致。连接和拆分字符串时顺序要一致。

论坛徽章:
0
发表于 2009-03-05 10:23 |显示全部楼层
若pNext指的是一副图象数据,比如JPEG,在接收若是否需要逐字节逆序一下?
谢谢!

论坛徽章:
0
发表于 2009-03-05 10:34 |显示全部楼层
还有一个小问题:VLC支持网络播放时不知道有没有支持字节序不同的平台

论坛徽章:
0
发表于 2009-03-05 11:01 |显示全部楼层
注意三个方面:
大小端
编译时的字节对齐设置(或者默认设置)
机器字长(对于int等类型)

要不就像6楼所言,直接串行化为字符串……

论坛徽章:
0
发表于 2009-03-05 11:21 |显示全部楼层

回复 #4 cobras 的帖子

同意4楼,用2楼的几个函数就可以。也可以直接自己定义规则,当做数组按规则拷贝。
另外,设计结构体时,如果不知道接入的系统,应该尽可能考虑四字节对齐。
1:有的系统是效率优先,比如sparc,arm。如果结构体中某成员起始地址为奇,很容易导致bus error,比如,奇地址开始,如果用到强制转换成4字节整数会出问题。
2:有的系统可能不能最小1个字节对齐。比如有些davinci的dsp,最小单位是2字节。
这是小弟的一些经验。说的不对原谅哈。

[ 本帖最后由 urapple 于 2009-3-5 11:27 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP