我需要很长的值从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指示很长很长不变。

二,你的回答你的问题正确,你打印出一个地址。与这条线替换您的NSLog行:

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

,你应该看到您所期望的结果。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top