我需要将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]));
并且您应该看到预期的结果。