如果我有一个指向对象foo的地址(例如)0x809b5c0,我可以通过调用
将其转换为NSStringNSString* fooString = [NSString stringWithFormat: @"%p", foo].
这将给我NSString @“0x809b5c0”。
扭转这个过程最简单的方法是什么?也就是说,从fooString开始,然后返回指向foo的指针。
答案 0 :(得分:9)
完整性......
致地址字符串
NSString *foo = @"foo";
NSString *address = [NSString stringWithFormat:@"%p", foo];
返回
NSString *fooAgain;
sscanf([address cStringUsingEncoding:NSUTF8StringEncoding], "%p", &fooAgain);
答案 1 :(得分:3)
这段代码对我有用:
NSString *pointerString = @"0x809b5c0";
NSObject *object;
sscanf([pointerString cStringUsingEncoding:NSUTF8StringEncoding], "%p", &object);
答案 2 :(得分:2)
将其转换为整数,然后将其转换为它应该是的任何类型......
NSUInteger myInt = [ myStr integerValue ];
char * ptr = ( char * )myInt;
那就是说,我真的不明白你为什么需要这个......
答案 3 :(得分:1)
根据我的经验,它更容易将指针的地址转换为NSInteger,如下所示:
MyObject *object=[[MyObject alloc]init];
//...
NSInteger adress=(NSInteger)object;
现在反过来:
MyObject *otherObject=(MyObject*)adress;
现在:object == otherObject
答案 4 :(得分:0)
改为使用NSMapTable:
MyClass* p = [[MyClass alloc]init];
NSMapTable* map = [NSMapTable mapTableWithKeyOptions:NSMapTableStrongMemory valueOptions:NSMapTableStrongMemory];
[map setObject:whateverValue forKey:p];
// ...
for(MyClass* key in map) {
// ...
}