2010-02-04 118 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