我正在使用offsetof()
宏,我只是想了解在使用上述偏移量时需要采取哪些额外步骤来获取正确的数据类型。
在此主要不是伪代码示例中:
typedef struct {
double a;
float b;
int c;
short d;
} MyStruct;
void doStuff(MyStruct* myStruct) {
char* base = (char*)myStruct;
int offsetA = offsetof(MyStruct, a);
int offsetB = offsetof(MyStruct, b);
int offsetC = offsetof(MyStruct, c);
int offsetD = offsetof(MyStruct, d);
double d = *(double*)(base+offsetA) + *(float*)(base+offsetB) + *(int*)(base+offsetC) + *(short*)(base+offsetD);
}
注意我需要将偏移量转换为MyStruct
中定义的特定数据类型。
有什么方法可以进一步对这个计算进行一般化,这样我就不需要提前知道类型信息了吗?
修改
伙计们,我很欣赏这些评论,但从教育的角度来看,我主要关注的是offsetof()
宏。我知道我可以做简单的指针解除引用来获取值。但是,如果我只有指针偏移,我怎样才能获得类型信息以使偏移有用?