搜索
bottom↓
回复: 4

430结构体的问题

[复制链接]

出0入0汤圆

发表于 2012-11-25 21:02:46 | 显示全部楼层 |阅读模式
本帖最后由 lhwaizhu 于 2012-11-25 21:11 编辑

#define  uint8    unsigned char
#define  uint16   unsigned int  
#define  uint32   unsigned long int   

#pragma pack(1)

typedef struct
{
        uint8 Name[8];
        uint8 Type[3];
} FILE_NAME;

typedef struct
{
        uint16 Start;
        uint32 Size;
} FILE_POSIT;

typedef struct
{
        FILE_NAME FileName;
        uint8 FileAttrib;
        uint8 UnUsed[10];
        uint8 FileUpdateTime[2];
        uint8 FileUpdateData[2];
        FILE_POSIT FilePosit;
} DIR;

这里定义了BUFFER[32]里面有32个字节,执行    DIR*ID = *(DIR*)BUFFER;结果发现ID里面的数据不对,我已经用#pragma pack(1)声明了字节对齐了,为什么还不对啊?请教下,谢谢了

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2012-11-25 21:42:28 | 显示全部楼层
不懂DIR*ID = *(DIR*)BUFFER;是要做什么?为什么不是DIR*ID = (DIR*)BUFFER;?

出0入0汤圆

 楼主| 发表于 2012-11-25 22:08:17 | 显示全部楼层
xizi 发表于 2012-11-25 21:42
不懂DIR*ID = *(DIR*)BUFFER;是要做什么?为什么不是DIR*ID = (DIR*)BUFFER;?

不好意思 写错了 是*ID = *(DIR*)BUFFER;

出0入0汤圆

发表于 2012-11-27 00:53:31 | 显示全部楼层
你仍然省略了一些细节,只好猜测了。
1。估计你在*ID = *(DIR*)BUFFER;之前应该定义了DIR * ID;否则不仅是数据不对的问题,而是编译通不过。
2。虽然你定义了DIR * ID;但是这个指针没有被初始化。然后你执行*ID = *(DIR*)BUFFER;则引发了空指针操作。后果就可想而知了。
提个建议,发有代码的帖子,最好不要重新录入,而应复制粘贴,或直接上传源文件。否则会引入新的错误,或遗漏很多细节。

出0入0汤圆

发表于 2012-11-27 08:27:03 | 显示全部楼层
大概楼主没明白我上次回复所说的意思。楼主是想把一个内存块按结构体方式来访问内部成员,但是430上最好别这样做,除非你做好了WORD对齐。否则,如果结构体中的某个双字节变量,如果恰好在奇地址上,按字方式访问该双字节变量会出错,那是因为编译器翻译时直接按mov.w方式来访问该变量,而mov.w访问时,地址必须是偶地址,如果不是,会强行变成偶地址,造成访问错误。所以在430上,最后别直接将一个内存块按结构体方式直接访问。除非,你确认各成员变量已经按2字节对齐了。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-28 08:30

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表