Question

Je dois convertir une longue valeur de int64 à NSData, donc je peux courir plus tard, un algorithme de hachage sur elle. Je joue:

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

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

La sortie de la console résultante est comme ceci:

6201314301187184 9000000000000000000

Pourquoi NSData ne stocke pas correctement la valeur de long numéro? Si je lance cela dans une boucle, la dérive NSData octets, en commençant par 620, puis 621 et. Suis-je fournir en sortie l'adresse du longNumber via [tampon octets] et non sa valeur?

Était-ce utile?

La solution

Vous avez deux problèmes majeurs: tout d'abord, votre nombre est trop grand pour le long que vous le jeter à. Au lieu de vous devriez avoir 9000000000000000000L pour indiquer une 9000000000000000000LL longue constante de temps.

Deuxièmement, vous avez répondu correctement à votre question, vous imprimez sur une adresse. Remplacez votre ligne NSLog avec cette ligne:

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

et vous devriez voir le résultat que vous attendez.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top