这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 关于结构体的问题

共2条 1/1 1 跳转至

关于结构体的问题

助工
2011-10-08 17:11:43     打赏
已知一个变量地址,且知道该变量是一结构体的某一变量,现在想通过该地址访问到结构体的其它变量。
以上是可以实现的,比如上将其减掉地址偏移再强制类型转化即可以访问了,但这是不安全的,因为不同的机器(8位、16位、32位)编译时的对齐不一样,造成访问混乱,请问有没有比较安全的方法?
当然,我也用过如下方法,结果是OK了,但不敢确定其安全性,希望大家出出主意,谢谢啦!~
void Action(unsigned char * buff)
{
    int len;
    ActionStruct * Block;
    Block = (MemoryBlock *)(buff);
    while((Block->Data) != buff)
    {
        len = ((Block->Data) - buff);
        Block = (ActionStruct *)((unsigned char *)Block-len);
    }
...
以上是不断比较是否访问对齐好了,才退出,但我不敢保证其它全性,而且方法也太烂啦,哈哈。



关键词: 关于     结构     问题    

助工
2011-10-08 17:14:37     打赏
2楼
结构体定义的时候让它对齐即可:
#pragma pack(1)//指定下面的结构体按照1字节对齐
typedef struct
{
        u8 x;
        u16 y;
}asdf;
#pragma pack()//恢复
然后你在程序里取一下它的大小看看:
u16 i=sizeof(asdf);//i=3

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]