Pregunta

Necesito convertir un valor de largo desde Int64 a NSData, por lo que después puedo ejecutar un algoritmo de control sobre el mismo. Realizo:

int64_t longNumber = 9000000000000000000L;
NSMutableData *buffer = [NSMutableData dataWithBytes:&longNumber length:sizeof(longNumber)];

NSLog(@"%lld", [buffer bytes]);
NSLog(@"%lld", longNumber);

La salida de la consola resultante es como sigue:

6201314301187184 9000000000000000000

¿Por qué no NSData almacenando adecuadamente el valor del número de largo? Si me quedo esto en un bucle, el NSData bytes de la deriva, a partir de 620, 621 y luego sucesivamente. ¿Estoy dando salida a la dirección de la longNumber a través de [buffer de bytes] y no su valor?

¿Fue útil?

Solución

Hay dos cuestiones principales: en primer lugar, su número es demasiado grande para el tiempo que se está echando a. En lugar de 9000000000000000000L usted debe tener 9000000000000000000LL para indicar una constante de tiempo largo.

En segundo lugar, ha respondido bien su pregunta, que está imprimiendo a cabo una dirección. Reemplazar su línea de NSLog con esta línea:

NSLog(@"%lld", *((int64_t*)[buffer bytes]));

y debería ver el resultado que espera.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top