Вопрос

Мне нужно преобразовать длинное значение из int64 в NSData, чтобы позже я мог запустить над ним алгоритм хэширования.Я выступаю:

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

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

Результирующий вывод на консоль выглядит следующим образом:

6201314301187184 9000000000000000000

Почему NSData неправильно хранит значение длинного числа?Если я запускаю это в цикле, байты NSData дрейфуют, начиная с 620, затем 621 и далее.Я вывожу адрес longNumber через [байты буфера], а не его значение?

Это было полезно?

Решение

У вас есть две основные проблемы:во-первых, ваше число слишком велико для того времени, на которое вы его разыгрываете.Вместо 9000000000000000000L тебе следовало бы 9000000000000000000LL чтобы указать длинную константу long.

Во-вторых, вы правильно ответили на свой вопрос, вы распечатываете адрес.Замените вашу строку NSLog на с этой строкой:

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

и вы должны увидеть результат, которого вы ожидаете.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top