簡體   English   中英

如何將 uint32_t 或 uint64_t 存儲在 void 指針中

[英]How can I store a uint32_t or uint64_t in a void pointer

我有一個 uint32_t(將來可能會變成 uint64_t)變量。 我使用的其中一個庫中有一個 function,它允許向它傳遞一個空指針。 如何將 uint32_t 傳遞給此 void 指針:

uint32_t myEntity = 1242242;
// not a pointer; so, error about invalid conversion
actor->userData = static_cast<void *>(myEntity);

我不能使用指向此原始類型的指針,因為該值可能來自參數或類似參數,並且由於它是一個 uint,所以我不想為它使用引用。

有什么方法可以將這個值設置為空指針嗎? 這樣,我就可以以相同的方式檢索它,而無需在堆中創建值以使其正常工作。 否則,我將需要管理對象的銷毀,以免造成 memory 泄漏。

對於您正在嘗試的內容,您需要使用reinterpret_cast而不是static_cast ,例如:

uint32_t myEntity = 1242242;
actor->userData = reinterpret_cast<void*>(myEntity);
uint32_t myEntity = reinterpret_cast<uint32_t>(actor->userData);

由於您提到該值將來可能會更改為uint64_t ,請注意在這種情況下您必須將代碼編譯為 64 位可執行文件(如果您還沒有),否則void*不會很大超過最高uint32_t值的足夠值。

暫無
暫無

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

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