gpt4 book ai didi

将 void* 转换为 char*

转载 作者:行者123 更新时间:2023-11-30 19:32:55 28 4
gpt4 key购买 nike

我有一个指向该结构的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的内容?

最佳答案

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

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

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

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

另外,不要循环直到最后一个for循环中的size,只循环8次,直到lolo满了。 newData 本身的字节数(不是它指向的内容)是恒定的,在 32 位机器上为 4 个字节,在 64 位机器上为 8 个字节。

最后一件事 - index++,而不是o++。据我所知,o 尚未定义。

关于将 void* 转换为 char*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46567488/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com