簡體   English   中英

將 void* 轉換為 char*

[英]Cast void* to char*

我有一個指向結構的char * 這是我的結構:

struct prot
{
    int size;
    unsigned short codeAction;
    void *data;
};

我恢復了sizecodeAction ,但現在我想恢復data 當我投射最后 8 個字節時,我什么都沒有。

下面的代碼只是一個測試,這是一個糟糕的代碼:

char lol[4];
for (int i = 0; i < 4; i++)
    lol[i] = test[i];

int size = *(int*)lol;

char loli[2];
int index = 0;   
for (int i = 4; i < 6; i++)
{
    loli[index] = test[i];
    index++;
}

int code = *(short*)loli;

char lolo[8];
index = 0;
for (int i = 6; i < size; ++i)
{
    lolo[index] = test[i];
    index++;
}

void *newData = (char *)lolo; // how can I cast it?

如何顯示newData的內容?

您的問題是,在轉換lolo您實際上是在轉換一個指向您定義的 char 數組的指針。 所以轉換的結果將是一個指向數組第一個單元格的char指針。

為什么不直接將其用作結構並定期訪問字段?

無論如何,您想將lolo用作 64 位類型的指針並訪問其中的內容。

void* newData = *((uint64_t*)lolo)

此外,不要循環直到最后一個for循環中的size ,只循環8次,直到lolo已滿。 newData本身的字節數(不是它指向的)是常數,在 32 位機器上是 4 個字節,在 64 位機器上是 8 個字節。

最后一件事 - index++ ,而不是o++ o沒有定義,就我所見。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM