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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top