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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top