3

我需要将一个 long 值从 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 等等。我是通过 [buffer bytes] 输出 longNumber 的地址而不是它的值吗?

4

1 回答 1

7

您有两个主要问题:首先,您的数字对于您投射的时间来说太大了。而不是9000000000000000000L你应该9000000000000000000LL指示一个 long long 常数。

其次,您正确回答了您的问题,您正在打印一个地址。将您的 NSLog 行替换为以下行:

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

你应该看到你期望的结果。

于 2009-05-10T23:30:12.980 回答