将int64_t转换为NSInteger

时间:2010-03-19 19:22:59

标签: objective-c casting nsinteger

如何在Objective-C中将int64_t转换为NSInteger?

此方法返回得分为int64_t *,我需要将其转换为NSInteger:

[OFHighScoreService getPreviousHighScoreLocal:score forLeaderboard:leaderboardId];

谢谢。

2 个答案:

答案 0 :(得分:6)

它们应该在64位计算机上直接兼容(或者如果使用NS_BUILD_32_LIKE_64构建):

NSInteger i = *score;

documentation表示NSInteger的定义如下:

#if __LP64__ || TARGET_OS_EMBEDDED || TARGET_OS_IPHONE || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64
typedef long NSInteger;
#else
typedef int NSInteger;
#endif

因此,在32位计算机上,您可能会遇到一些截断问题。在我的机器上,这句话:

NSLog(@"%d %d", sizeof(int64_t), sizeof(NSInteger));

给出了这个输出:

2010-03-19 12:30:18.161 app[30675:a0f] 8 8

答案 1 :(得分:2)

问题在于我的代码:

int64_t *score; 
[OFHighScoreService getPreviousHighScoreLocal:score forLeaderboard:leaderboardId];
NSLog(@"------------------------- %d", *score);

要工作,应该是:

int64_t score;  
[OFHighScoreService getPreviousHighScoreLocal:&score forLeaderboard:leaderboardId];
NSLog(@"------------------------- %qi", score);

使用此代码,我显然可以这样做:

NSInteger newScore = score;

谢谢。