[英]Cast void* to char*
我有一個指向結構的char *
。 這是我的結構:
struct prot
{
int size;
unsigned short codeAction;
void *data;
};
我恢復了size
和codeAction
,但現在我想恢復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.