如何获取结构体中任意成员的位位置?
在示例中>
typedef struct BitExamStruct_
{
unsigned int v1: 3;
unsigned int v2: 4;
unsigned int v3: 5;
unsigned int v4: 6;
} BitExamStruct;
是否有任何宏可以获取任何成员的位位置,例如 GetBitPos(v2, BitExamStruct)?
我认为编译器可能根据结构中的位长度知道成员的位置。所以我想知道是否可以仅使用一个简单的宏而不运行代码来获得它。
先感谢您。
据我所知,没有标准方法可以做到这一点,但这并不意味着您找不到解决方案。
下面的代码并不是最漂亮的;这是一种识别变量在内存中“开始”位置的技巧。请记住,根据字节顺序,以下内容可能会给出不同的结果:
#include <stdio.h>
#include <string.h>
typedef struct s_toto
{
int a:2;
int b:3;
int c:3;
} t_toto;
int
main()
{
t_toto toto;
unsigned char *c;
int bytes;
int bits;
memset(&toto, 0, sizeof(t_toto));
toto.c = 1;
c = (unsigned char *)&toto;
for (bytes = 0; bytes < (int)sizeof(t_toto); bytes++)
{
if (*c)
break;
}
for (bits = 0; bits < 8; bits++)
{
if (*c & 0b10000000)
break;
*c = (*c << 1);
}
printf("position (bytes=%d, bits=%d): %d\n", bytes, bits, (bytes * 8) + bits);
return 0;
}
我所做的是将整个结构初始化为 0,并将 1 设置为我想要定位的变量的值。结果是该结构中只有一位被设置为 1。然后我逐字节读取内存字节,直到找到一个不为零的值。一旦找到,我就可以查看它的位,直到找到已设置的位。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)