如何从地址获取字符串?
答
string& s = *reinterpret_cast<string*>(your_ulong);
答
@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_t
和uintptr_t
,它们被保证(按照C99标准)足够大以存储指针类型。但是,C99不是C++的一部分,许多C++编译器(阅读:Microsoft)可能不提供这种功能(因为谁需要编写可移植代码?)。但是,C99并不是C++的一部分,幸运的是,stdint.h
非常有用,以至于存在解决方法,并且在互联网上可以轻松找到与旧版编译器兼容的stdint.h
的便携式(和免费)实现。
当然,我可能会使用C风格的演员阵容,但这是因为我是一名C程序员。 – 2010-02-04 07:22:37
出于实际的目的,如果有任何整型是'size_t'就像指针一样大。 – Potatoswatter 2010-02-04 07:50:25
@Patatoswatter - 出于实际的目的,是的,它会的,但我实际上刚刚问了一个问题(http://stackoverflow.com/questions/1464174/size-t-vs-intptr-t)关于这是否是杂凑或合乎逻辑的要求。事实证明,对于_full_可移植性,'size_t'是不够的。不是现在,而是过去,甚至未来(因为谁可以预测这一点?)。 – 2010-02-04 08:05:32