C++ 在c+;中将void*类型转换为int时,程序崩溃+;
我正在使用一个具有回调函数的库,该函数以void*作为参数。我需要从这个void*中获取int,下面的代码在c中可以正常工作,但在c中不行++ 在c中: 在C++中,我尝试了下面的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*转换为
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))