我有几个包含各种参数组合的结构。我编写了一个函数,该函数采用对结构(有几种不同类型)的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:修复循环中的逻辑错误
最佳答案
您似乎正在寻找的是模板,因此编译器会在需要时创建正确的方法。
关于c++ - 解引用void指针以将值分配给struct,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59576709/