Convertendo int64 para NSData
-
21-08-2019 - |
Pergunta
Eu preciso converter um valor longo de int64 para NSData, para que eu possa mais tarde executar um algoritmo de hash sobre ele. I executar:
int64_t longNumber = 9000000000000000000L;
NSMutableData *buffer = [NSMutableData dataWithBytes:&longNumber length:sizeof(longNumber)];
NSLog(@"%lld", [buffer bytes]);
NSLog(@"%lld", longNumber);
A saída do console resultante é assim:
6201314301187184 9000000000000000000
Por que é NSData não armazenar corretamente o valor do número de tempo? Se eu executar este num ciclo, o NSData bytes deriva, começando com 620, em seguida, 621 e no. Am I saída o endereço do longNumber via [tampão bytes] e não o seu valor?
Solução
Você tem duas questões principais: em primeiro lugar, o seu número é muito grande para o tempo que você está lançando-a. Em vez de 9000000000000000000L
você deve ter 9000000000000000000LL
para indicar um longo constante.
Em segundo lugar, você respondeu a sua pergunta corretamente, você está imprimindo um endereço. Substitua sua linha NSLog com com esta linha:
NSLog(@"%lld", *((int64_t*)[buffer bytes]));
e você deve ver o resultado que você espera.