我有这个结构:
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而不是其值。
答案 0 :(得分:4)
而不是BYTE *data
您应该使用BYTE data[0]
或(如果您的编译器不喜欢这样)BYTE data[1]
。这里指针和数组之间的区别是至关重要的 - 数组是"数据就在这里"而指针是"其他地方的数据"这不是你的情况。
答案 1 :(得分:-1)
这样的东西可能适用于c ++:
UINT* a1 = &myStruct->len;
UINT* a2 = ++a1;
然后将a2投射到你想要的任何地方。 请注意数据的大小和类型。