簡體   English   中英

如何以整數存儲內存地址?

[英]How to store a memory address in an integer?

這與此處找到的問題標題完全相同 - 我還想將一個內存地址存儲在變量中 - 或者更確切地說,在變量中存儲void* 但是,我寧願將它存儲在某種形式的int而不是string ,因為我之后想把它轉換回指針。

這是因為它是一個類的成員,我想用boost serialize序列化,如果我確實使用了void* ,boost serialize可能會嘗試存儲指針指向的內容,這不是很明智在我的情況下。

我需要32位和64位gcc和MSVC,所以基本上我想知道是否有一個內置的整數類型,它是同一平台上指針的大小。 或者,我想我需要IFDEF我自己的類型?

intptr_tuintptr_t是足以容納void*整數類型。 它們由<cstdint>的C ++ 11和<stdint.h> C99定義

如果uintptr_t不可用,您可以嘗試使用相同標頭中定義的uintmax_t<boost/cstdint.hpp> Boost。

在C ++中將對象的地址轉換為整數類型(不使用C風格的強制類型轉換)的一種方法是使用reinterpret_cast。 保證能夠保存其他答案中提到的指針地址的整數類型是uintptr_t。

uintptr_t myint = reinterpret_cast<uintptr_t>(&myobject)

要么

uintptr_t myint = reinterpret_cast<uintptr_t>(mypointer)

你不能序列化指針。

只是因為當你繞過反序列化時,指針將無效。

使用類似JSON,XML,XDR等的東西。您的選擇。

序列化是為了使它平坦。 指針是一個分支。

順便說一句 - 你忽略了這樣一個事實,即C ++假設在更安全方面更好一點。

暫無
暫無

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

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