繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM