取消引用 void 指针以将值分配给结构

Dereferencing void pointer to assign value to struct

本文关键字:分配 结构 引用 void 指针 取消      更新时间:2023-10-16

我有几个包含各种参数组合的结构。我编写了一个函数,该函数接受对结构体的 void 指针引用(有几种不同的类型(,并将来自 data 参数的信息写入其中。这是下面的功能:

void SubModelBase::writeDataStruct(byte msgID, void *ptr, QByteArray data)
{
*(byte*)ptr[0] = msgID;
*(byte*)ptr[1] = data.length();
for (int i = 2; i < data.length(); i++)
{
*(byte*)ptr[i] = data.at(i);
}
}

void *ptr 是对我想将数据写入的结构的引用,但我在引用指针以便我可以写入它时遇到问题。我确定我只是在这里的语法中遗漏了一些愚蠢的东西,但目前我没有看到它......

编辑:

好的,我重写了函数,在分配值之前首先将 void 指针转换为字节指针:

void SubModelBase::writeDataStruct(byte msgID, void *ptr, QByteArray data)
{
byte* structData = (byte*)ptr;
structData[0] = msgID;
structData[1] = data.length();
for (int i = 0; i < data.length(); i++)
{
structData[i + 2] = data.at(i);
}
}

尚未测试,但现在它至少可以编译。我这样做是因为有超过 30-40 种不同的结构需要在其中填充数据,我需要单个函数,可以在不知道每个结构的详细信息的情况下轻松处理操作。但是,如果有更好的方法来解决这个问题,我绝对愿意接受想法。

编辑2:修复了循环中的逻辑错误

您似乎正在寻找一个模板,以便编译器在需要时创建正确的方法。