我需要将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的地址,而不是其值?

最佳答案

您有两个主要问题:首先,您的数字太大了,无法持续使用。代替9000000000000000000L,您应该使用9000000000000000000LL来指示long long常数。

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

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


并且您应该看到预期的结果。

10-06 06:54