[英]Dereferencing void pointer to assign value to struct
我有几个包含各种参数组合的结构。 我编写了一个函数,该函数采用指向结构的空指针引用(有几种不同的类型),并将数据参数中的信息写入它们。 这是下面的函数:
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:修复了循环中的逻辑错误
您似乎在寻找一个模板,以便编译器在您需要时创建正确的方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.