C++ 在c+;中将void*类型转换为int时,程序崩溃+;

C++ 在c+;中将void*类型转换为int时,程序崩溃+;,c++,C++,我正在使用一个具有回调函数的库,该函数以void*作为参数。我需要从这个void*中获取int,下面的代码在c中可以正常工作,但在c中不行++ 在c中: 在C++中,我尝试了下面的 int n = atoi(static_cast<const char*>(ptr)); int n=atoi(静态广播(ptr)); 当我跑的时候,它崩溃了。请帮助我在c++中将void*转换为int的正确方法对于这种情况,不要使用atoi它完全意味着其他东西 为了便于使用,您应该将void*转换为

我正在使用一个具有回调函数的库,该函数以void*作为参数。我需要从这个void*中获取int,下面的代码在c中可以正常工作,但在c中不行++

在c中:

在C++中,我尝试了下面的

int n = atoi(static_cast<const char*>(ptr));
int n=atoi(静态广播(ptr));

当我跑的时候,它崩溃了。请帮助我在c++中将void*转换为int的正确方法

对于这种情况,不要使用
atoi
它完全意味着其他东西

为了便于使用,您应该将
void*
转换为
int
类型

int n = static_cast<int>(ptr);
我在这些示例中使用int,但没有。对于有符号的数字使用
intptr\u t
,对于无符号的数字使用
uintpr\u t

静态转换(重新解释转换(ptr))
static_cast<int>(reinterpret_cast<intptr_t>(ptr))

这很好。

请提供一个。您可以使用
intn=(int)ptr。或
int n=静态(ptr)
。请注意,对于整数类型,您应该使用
intptr\u t
uintpr\u t
,它们保证足够宽,以便指针值适合。用谷歌搜索它们。这可能是因为
void*
是64位的,而您的
int
大小更小(32位)。您可以在编译时使用
static\u断言(sizeof(void*)==sizeof(int),“void指针的大小不同于int”)
您可以添加一个
intptr\u t
cast以使警告静音:
intn=(int)(intptr\u t)ptr。(如果您确信指针中编码的值总是可以表示为<代码> int <代码>),两个解决方案都会导致C++中的警告/错误。谢谢你的建议,下面的演员很好静态铸造(重新解释铸造(空心铸造))```
int n = (int)ptr;
static_cast<int>(reinterpret_cast<intptr_t>(ptr))