簡體   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