Conversion int64 NSData
-
21-08-2019 - |
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?
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.