2010-01-22 7 views
6

Deseo obtener el valor sin signo de un NSNumber. No sé por qué, pero no funciona. Esto es lo que hice:No se puede obtener el valor largo sin signo de NSNumber

NSString * stern = [idd objectAtIndex:indexPath.row]; // get a String with Number from a NSArray 
NSNumberFormatter * lols = [[NSNumberFormatter alloc] init]; 
NSNumber * iddd = [lols numberFromString:stern]; 
NSLog(@"%@", iddd); // I get the right number: 8084143463 
unsigned long fooo = [iddd unsignedLongValue]; 
NSLog(@"%lu", fooo); // I get the wrong number: 3789176167 
[twitterEngine deleteUpdate:fooo]; 
+0

¿Cómo son los valores en el depurador? ¿Son los mismos que se imprimen? –

+0

Por lo que vale, en 10.6.2, obtengo 8084143463 ambas veces, y los valores del depurador son consistentes. Sugeriría reemplazar su primera línea con 'NSString * stern = @" 8084143463 ";' y renombrar las variables para que tengan sentido para el observador casual. –

+0

Sí, el NSNumber es 8084143463 y el unsigned long 3789176167 – Flocked

Respuesta

9
8084143463 == 0x1e1da3d67 
3789176167 == 0x0e1da3d67 

El tamaño de un sistema largo en un sistema de 64 bits es de 8 bytes. El tamaño de una larga en un sistema de 32 bits (como el iPhone) es de 4 bytes. Necesita usar un long long en un iPhone para almacenar ese valor.

+0

Eso suena logisch, gracias por la respuesta. Pero lo intenté con long long fooo = [iddd longLongValue]; y foo es nuevamente 3789176167 – Flocked

+3

También necesitarás usar el especificador de formato de '% llu'. –

+0

Ah ahora funciona. Me olvidé de escribir% llu en NSLog. ¡Gracias! – Flocked

3

Su valor es mayor que el valor máximo de un largo sin signo puede sostener (2^32 - 1 == 4294967295) en el modo de 32 bits.

Cuestiones relacionadas