转换到的Int64 NSData的
-
21-08-2019 - |
题
我需要很长的值从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]));
,你应该看到您所期望的结果。
不隶属于 StackOverflow