将void *转换为struct *

时间:2016-08-12 13:38:14

标签: c++ c struct casting

我有这个结构:

typedef struct
{
    UINT8 a;
    UINT8 len;
    BYTE *data;
} MyStruct;

和这个二进制数组[0x00,0x03,0x08,0x09,0x0a]分配给void *变量" BINDATA"。

如何将BINDATA转换为MyStruct并能够访问其数据"场?

我试过了:

MyStruct *myStruct = (MyStruct*) BINDATA;

之后我能够访问:

myStruct->a; //gave me 0x00
myStruct->len; //gave me 0x03

但我无法访问

myStruct->data;

没有内存访问冲突。我想这是因为"数据"地址指针设置为0x08而不是其值。

2 个答案:

答案 0 :(得分:4)

而不是BYTE *data您应该使用BYTE data[0]或(如果您的编译器不喜欢这样)BYTE data[1]。这里指针和数组之间的区别是至关重要的 - 数组是"数据就在这里"而指针是"其他地方的数据"这不是你的情况。

答案 1 :(得分:-1)

这样的东西可能适用于c ++:

UINT* a1 = &myStruct->len;
UINT* a2 = ++a1;

然后将a2投射到你想要的任何地方。 请注意数据的大小和类型。