C++使用(void*)强制转换为int进行比较
C++ using (void*) to cast to an int for comparison?
我正在(尝试)在ObjC项目中编写一些(工作的)C++:-)C++库(Box2D)为我提供了一个b2Fixture类,该类具有"用户数据"属性,供程序员存储与它们相关的内容。
在我的情况下,它只需要存储一个整数。根据我在ObjC中的主要程序,一个是将整数强制转换为void*:
headFixture->SetUserData( (void*) 10 );
在程序C++端的一个实用方法中,我想将用户数据与给定的整数进行比较(即,它们是常数,10=坚实的基础,11=平台,等等)
第一个比较使用拒绝编译的(void*)。在SO上发现了一种不同的方法,如第二个使用*((intptr_t*)…)的比较所示。那个编译,但它发送EXC_BAD_ACCESS:
bool AbstractContactListener::contactContainsType(JRContact contact, int type){
if (( type == ( (void *) contact.fixtureA->GetUserData() )) ||
( type == *( (intptr_t *) contact.fixtureB->GetUserData() ))
) {
return true;
}
return false;
}
我没有办法处理这个问题了。请帮助:-)谢谢J.
编辑/解决方案:
bool AbstractContactListener::contactContainsType(JRContact contact, int type){
if (( type == (intptr_t) contact.fixtureA->GetUserData() ) ||
( type == (intptr_t) contact.fixtureB->GetUserData() )
) {
return true;
};
return false;
}
这个对我有用!
我不清楚你想做什么,但你可能应该将数据转换回你想要的类型:
if (( type == reinterpret_cast<int>(contact.fixtureA->GetUserData() )) ||
( type == reinterpret_cast<int>(contact.fixtureB->GetUserData() ))
) {
就我所见,您只需要将其投射回来;您需要使用一个整数类型,该类型保证与要通过强制转换的指针大小相同,否则编译器可能会出错;
#include <stdint.h>
if(type == (intptr_t)(contact.fixtureA->GetUserData())) {
不过,有一点需要注意,据我所知,C标准并不能保证将int转换为void*和back会返回相同的值。一个更安全的选择可能是只使用要使用的指针;
int *value = malloc(sizeof(int));
*value = 10;
headFixture->SetUserData( value );
和
if(type == *(int*)(contact.fixtureA->GetUserData())) {
这不会诱使任何编译器破坏您的代码。
您想要使用reinterpret_cast<int>
。如果你犯了一个错误,那么你并没有按照你说的去做。(很可能您正试图将void *
取消引用为int *
。)
int stored_type = reinterpret_cast<int>(contact.fixtureA->GetUserData());
相关文章:
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 是否可以从int转换为enum类类型
- 如何在C++中将一个无符号的 int 转换为两个无符号的短裤?
- 功能样式转换从 'int' 到 'ItemType' 的匹配转换
- 将 int 数组转换为 std::vector<int*>
- 如何转换 int 变量并附加到常量 wchar_t*
- 类型转换<int>的舍入问题
- 在Objective-C中调用sqlite3数据库时,如何调用和转换int/NSNumber
- 转换 int -> 无符号长 长 是否由标准定义
- 简单的 int 到字符串转换..int to const char* 无效
- 如何将转换 int 除法键入为浮点数
- C++类型转换 int * 到类
- 预期的类型说明符,并且无法在初始化时转换“int*”
- 转换int并将其与char*连接
- 字符串流在转换int型时添加新行
- 转换int为字符串/char c++ /Arduino
- c# P-Invoke:如何转换INT fun(BYTE *bStream, UINT16 *nCount, const
- 类型转换(int**)和int(*)的区别
- 从"int"到"nodeType"的无效转换<int>
- 从无符号int构造对强制转换int的引用