将void *转换为char *

时间:2017-10-04 14:30:05

标签: c casting

我有一个char *指向该结构。这是我的结构:

struct prot
{
    int size;
    unsigned short codeAction;
    void *data;
};

我恢复了sizecodeAction,但现在我想要恢复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的内容?

1 个答案:

答案 0 :(得分:0)

您的问题是,在转换lolo时,您实际上会将指针强制转换为您定义的char数组。因此,强制转换的结果将是指向数组第一个单元格的char指针。

为什么不直接将它用作结构并定期访问字段?

无论如何,您希望将lolo用作64位类型指针并访问其中的内容。

void* newData = *((uint64_t*)lolo)

此外,不要在最后size循环中循环for,仅循环8次,直到lolo已满。 newData本身的字节数(指向的内容)是常量,32位机器上是4字节,64位上是8字节。

最后一件事 - index++,而不是o++。我没有定义o