2013-05-10 9 views

Odpowiedz

67
NSUInteger intVal = 10; 
int iInt1 = (int)intVal; 
NSLog(@"value : %lu %d", (unsigned long)intVal, iInt1); 

więcej odniesienia wyglądać here

+1

Dokumentacja Apple (twój link) wyraźnie stwierdza "Rzuć wartość bez znaku". dla 'NSUInteger'. Zatem ostatnią linią powinno być 'NSLog (@" wartość to:% lu% d ", (unsigned long) intVal, iInt1);'. –

+0

@NikolaiRuhe thx za wskazanie mojego błędu, zaktualizowałem moją odpowiedź – Girish

0

To proste jak ten,

NSUInteger uintV = 890; 
int intVal = (int) uintV; 
NSLog(@"the value is : %lu", (unsigned long)intVal); 


to wypisze coś takiego,
wartość wynosi: 890

+0

Wyjaśnij głosowanie w dół proszę ... –

3

Explicit oddanych do int

NSUInteger foo = 23; 
int bar = (int)foo; 

Chociaż

NSLog(@"%lu",foo); 

działa OK na prąd buduje z OSX. To nie jest bezpieczne, ponieważ NSUInteger jest typowane jako niepodpisane na inne kompilacje. Takich jak iOS. Ścisłe odpowiedź jest do oddania go najpierw:

NSLog(@"%lu",(unsigned long)foo); 
1

Hi całą swoją pracę dla mnie ...

Próbowałem to ..

NSUInteger inbox_count=9; 
NSLog(@"inbox_count=%d",(int)inbox_count); 

//output 
inbox_count=9 

dziękuję wszystkim ..

+0

Zły pomysł. Na OSX, NSUInteger jest długi. Tak więc rzutowanie na int spowoduje przepełnienie dużych wartości. Może to być dobre dla systemu iOS, ale lepiej przyzwyczaić się do robienia tego w sposób, który nie narusza innych wersji. –

+2

@SteveWaddicor Masz inne problemy, gdy twoja skrzynka odbiorcza zawiera> 2 miliardy wiadomości. –

+0

Specyfika tego przypadku nie jest limitem odpowiedzi na stackoverflow. Ktoś inny może spróbować zastosować złamany kod dla numeru, który może być tak duży. Lepiej zrobić to dobrze, kiedy źle to nie jest łatwiejsze. –

Powiązane problemy