我有一个char *
指向该结构。这是我的结构:
struct prot
{
int size;
unsigned short codeAction;
void *data;
};
我恢复了size
和codeAction
,但现在我想要恢复data
。
当我投出最后8个字节时,我什么都没有。
以下代码只是一个测试,它是一个糟糕的代码:
char lol[4];
for (int i = 0; i < 4; i++)
lol[i] = test[i];
int size = *(int*)lol;
char loli[2];
int index = 0;
for (int i = 4; i < 6; i++)
{
loli[index] = test[i];
index++;
}
int code = *(short*)loli;
char lolo[8];
index = 0;
for (int i = 6; i < size; ++i)
{
lolo[index] = test[i];
index++;
}
void *newData = (char *)lolo; // how can I cast it?
如何显示newData
的内容?
答案 0 :(得分:0)
您的问题是,在转换lolo
时,您实际上会将指针强制转换为您定义的char数组。因此,强制转换的结果将是指向数组第一个单元格的char
指针。
为什么不直接将它用作结构并定期访问字段?
无论如何,您希望将lolo
用作64位类型指针并访问其中的内容。
void* newData = *((uint64_t*)lolo)
此外,不要在最后size
循环中循环for
,仅循环8次,直到lolo
已满。 newData
本身的字节数(不指向的内容)是常量,32位机器上是4字节,64位上是8字节。
最后一件事 - index++
,而不是o++
。我没有定义o
。