2012-10-24 12 views
18

ho questo pezzo di codice C Obiettivo, dove sto Casting un NSString a un int:Objective C - Type Casting Da NSString verso Int

NSString *[email protected]"123abc"; 
NSInteger b=(int) a; 
NSLog(@"b: %d",b); 

E la NSLog produce questa uscita:

b: 18396 

Qualcuno può spiegarmi perché questo sta accadendo?

Mi trovavo sotto il tipo di impronta mentre lanciando una stringa su un numero intero si ottiene il valore numerico dalla stringa.

+0

per ottenere valori numerici dalla stringa: http://stackoverflow.com/questions/4663438/objective-c-find-numbers-in-string – janusbalatbat

risposta

31

Hai il valore intero del puntatore sull'oggetto NSString. Per analizzare la stringa a intero si dovrebbe fare:

NSString *a = @"123abc"; 
NSInteger b = [a integerValue]; 
5

Quando si esegue il cast di un oggetto su un numero intero, si ottiene il puntatore all'indirizzo di memoria. È possibile chiamare [a integerValue] per ottenere il valore intero della stringa.

Inoltre durante il casting è preferibile utilizzare NSInteger di. Perché quando si utilizza un sistema operativo a 64 bit, NSInteger sarà 64 bit.

10

Per ottenere l'uso valore numerico:

int val = [stringObj intValue]; 

o per NSInteger:

NSInteger val = [stringObj integerValue]; 
0

O con Objective-C sintassi letterali:

@([a intValue]); 
+0

ottieni NSNumber * qui, non NSInteger – Cfr