如何使用按位运算来操纵结构成员?

时间:2016-12-06 11:23:53

标签: c

例如,对于结构:

struct name{
 int a;
 char b;
 float c;
}g;
g.b='X';

现在,我想使用按位运算符(b<<等)访问结构成员>>,并将其更改为'A'。 是否可以使用此类运算符访问结构成员?

2 个答案:

答案 0 :(得分:0)

对于struct的按位运算由于填充而没有多大意义,更重要的是它只是在一开始就杀死了一个结构的目的。按位操作就像名称所说的那样在变量中操作bit#。结构变量通常(如果它们没有打包)将被填充,所以在你打包它们之前你不能保证它们可以访问它们但是如果你想问你是否可以,是的你可以,但是你必须将struct g转换为32位值然后如果两个变量在这个空间中你可以对这个转换值使用位操作。如果有必要,你可以从你的结构创建联合并将原始变量作为一个联合部分,并将结构作为另一个选项,然后你可以对原始变量进行按位操作。

答案 1 :(得分:0)

您可以通过获取b的偏移来更改数据。我知道,这段代码看起来并不好。但它符合你的目的。

#include <stdio.h>

struct name
{
        int a;
        char b;
        float c;
}g;

int main()
{
        g.b='X';
        int y=0;

        int offset = &((struct name *)NULL)->b; // Find Offset of b
        char *p = (char *)&g;
        int i=0;

        for(i=0;i<offset;i++)
        {
                ++p;
        }

        *p=*p|(1<<0);

       // *p = 'A';

        printf("........%c\n",g.b);

}