免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3139 | 回复: 5
打印 上一主题 下一主题

[C] 【求助】字节对齐?字节序? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-09-27 12:55 |只看该作者 |倒序浏览
TCP客户端从服务端接收到一段数据,recv到buff后打印值为:
char buff[] = { 0x30 0x31 0x77 0x62   0xa4 0x0 0x0 0x0   0x12 0x36 0x6f 0xd9 0x0 0x0 0x0 0x0 }
共计16个字节。

现有对应结构体:
struct data_t
{
     unsigned int a;
     unsigned int b;
     long long    c;
};

通过结构体强转buff里的数据:
struct data_t* data = (struct data_t*)buff;

结果:
printf("%d\n", data->b);
此时随机出现4种情况:
1. data->b = { 0xa4 0x00 0x00 0x00 } , 这是期望的结果
2. data->b = { 0xa4 0x31 0x77 0x62 }
3. data->b = { 0xa4 0x00 0x77 0x62 }
4. data->b = { 0xa4 0x00 0x00 0x62 }

注:
tcp客户端和服务端发送数据时均未做hton转换,结构体定义未有#pramga pack(1)定义

运行平台:
Linux (none) 2.6.24-rt1-hi3515v100 #15 Mon Nov 5 18:03:35 CST 2012 armv5tejl unknown

处理器:
Processor       : ARM926EJ-S rev 5 (v5l) (小端)

求助!!!

论坛徽章:
0
2 [报告]
发表于 2013-09-27 12:56 |只看该作者
为什么会有这种随机现象?不像是字节序的问题

论坛徽章:
0
3 [报告]
发表于 2013-09-27 12:59 |只看该作者
struct data_t
{
      unsigned int a;
      unsigned int b;
      long long    c;
};
结构体没有填充字节,也不像是字节对齐问题?

论坛徽章:
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
4 [报告]
发表于 2013-09-27 13:05 |只看该作者
2点必须注意:

1, 结构体内成员变量的字节序一定要逐个转换.
2, 结构体一定要统一对齐方式, 通常就是按1对齐.

论坛徽章:
0
5 [报告]
发表于 2013-09-27 13:12 |只看该作者
现象有点奇怪主要是,对齐和字节序因为场景简单再加上别人写的代码,所以都是没有的

论坛徽章:
0
6 [报告]
发表于 2013-09-27 14:00 |只看该作者
没人????????????
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP