[英]How to store a memory address in an integer?
這與此處找到的問題標題完全相同 - 我還想將一個內存地址存儲在變量中 - 或者更確切地說,在變量中存儲void*
。 但是,我寧願將它存儲在某種形式的int
而不是string
,因為我之后想把它轉換回指針。
這是因為它是一個類的成員,我想用boost serialize序列化,如果我確實使用了void*
,boost serialize可能會嘗試存儲指針指向的內容,這不是很明智在我的情況下。
我需要32位和64位gcc和MSVC,所以基本上我想知道是否有一個內置的整數類型,它是同一平台上指針的大小。 或者,我想我需要IFDEF
我自己的類型?
intptr_t
和uintptr_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.