Domanda

Ho bisogno di convertire un valore da lungo Int64 a NSData, in modo da poter successivamente eseguire un algoritmo di hash su di esso. Eseguo:

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

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

L'output della console risultante è simile a questo:

6201314301187184 9.000.000 mille miliardi

Perché NSData non memorizza correttamente il valore del numero di tempo? Se ho eseguito questo in un ciclo, il NSData byte alla deriva, a partire da 620, poi 621 e. Sto emettere l'indirizzo del longNumber tramite [buffer di bytes] e non il suo valore?

È stato utile?

Soluzione

Hai due problemi principali: in primo luogo, il numero è troppo grande per il tempo che si sta casting a. Invece di 9000000000000000000L si dovrebbe avere 9000000000000000000LL per indicare una lunga lunga costante.

In secondo luogo, avete risposto alla tua domanda in modo corretto, si stampa fuori un indirizzo. Sostituire la linea NSLog con con questa linea:

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

e si dovrebbe vedere il risultato che ci si aspetta.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top