Konvertieren von int64 zu NSData
-
21-08-2019 - |
Frage
Ich brauche einen langen Wert von int64 zu NSData konvertieren, so dass ich später einem Hash-Algorithmus darauf laufen. Ich fahre:
int64_t longNumber = 9000000000000000000L;
NSMutableData *buffer = [NSMutableData dataWithBytes:&longNumber length:sizeof(longNumber)];
NSLog(@"%lld", [buffer bytes]);
NSLog(@"%lld", longNumber);
Die resultierende Ausgabe der Konsole ist wie folgt:
6201314301187184 9000000000000000000
Warum ist NSData nicht richtig den Wert der langen Nummer zu speichern? Wenn ich dies in einer Schleife ausgeführt, die Bytes NSData driftet, mit 620 beginnen, dann 621 und weiter. Bin ich die Adresse des longNumber Ausgabe von über [Puffer Bytes] und seinen Wert nicht?
Lösung
Sie haben zwei wichtige Fragen: Erstens, Ihre Nummer für die lange zu groß ist, dass Sie es zu werfen. Statt 9000000000000000000L
sollten Sie 9000000000000000000LL
eine lange lange konstant, um anzuzeigen.
Zweitens beantwortet Sie Ihre Frage richtig, Sie sind eine Adresse auszudrucken. Ersetzen Sie Ihre NSLog Linie mit dieser Zeile:
NSLog(@"%lld", *((int64_t*)[buffer bytes]));
und Sie sollten das Ergebnis Sie erwarten, sehen.