2010-02-04 159 views
2

我有一個ULONG值包含地址。如何從地址獲取字符串?

地址基本上是字符串(數組wchar_t由NULL字符終止)

我希望檢索字符串。

這樣做的最好方法是什麼?

回答

3
string& s = *reinterpret_cast<string*>(your_ulong); 
7

@KennyTM的答案是正確的金錢如果你的意思是這是一個指針std::string類的實例‘基本上是一個字符串’。如果你的意思是這是一個指向C字符串,我懷疑可能是更可能的是,你需要:

char *s = reinterpret_cast<char *>(your_ulong); 

或者,你的情況:

whcar_t *s = reinterpret_cast<wchar_t *>(your_ulong); 

還要注意的是,你不能安全以任何舊的整數類型存儲指針。我可以編譯一個32位的long類型和一個64位指針類型。如果你的編譯器支持它,用整數存儲指針的正確方法是使用stdint.h類型intptr_tuintptr_t,它們被保證(按照C99標準)足夠大以存儲指針類型。但是,C99不是C++的一部分,許多C++編譯器(閱讀:Microsoft)可能不提供這種功能(因爲誰需要編寫可移植代碼?)。但是,C99並不是C++的一部分,幸運的是,stdint.h非常有用,以至於存在解決方法,並且在互聯網上可以輕鬆找到與舊版編譯器兼容的stdint.h的便攜式(和免費)實現。

+0

當然,我可能會使用C風格的演員陣容,但這是因爲我是一名C程序員。 – 2010-02-04 07:22:37

+0

出於實際的目的,如果有任何整型是'size_t'就像指針一樣大。 – Potatoswatter 2010-02-04 07:50:25

+0

@Patatoswatter - 出於實際的目的,是的,它會的,但我實際上剛剛問了一個問題(http://stackoverflow.com/questions/1464174/size-t-vs-intptr-t)關於這是否是雜湊或合乎邏輯的要求。事實證明,對於_full_可移植性,'size_t'是不夠的。不是現在,而是過去,甚至未來(因爲誰可以預測這一點?)。 – 2010-02-04 08:05:32