将int64转换为NSData

时间:2009-05-10 23:22:14

标签: iphone nsdata typeconverter int64

我需要将一个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,然后开启。我是通过[缓冲字节]输出longNumber的地址而不是它的值?

1 个答案:

答案 0 :(得分:7)

您有两个主要问题:首先,您的号码太大而无法投入。 <{1}}取代9000000000000000000L而不是9000000000000000000LL来表示长期常数。

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

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

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