将 int64_t 转换为 NSInteger

发布于 2024-08-26 08:50:57 字数 220 浏览 9 评论 0原文

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

这个方法返回一个 int64_t* 的分数,我需要将它转换为 NSInteger:

[OFHighScoreService getPreviousHighScoreLocal:score forLeaderboard:leaderboardId];

谢谢。

How can i convert int64_t to NSInteger in Objective-C ?

This method returns into score an int64_t* and I need to convert it to NSInteger:

[OFHighScoreService getPreviousHighScoreLocal:score forLeaderboard:leaderboardId];

Thank you.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

美煞众生 2024-09-02 08:50:58

问题出在我的代码上:

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;

谢谢。

The problem was on my code:

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

To work it should be:

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

And with this code i can obviously do:

NSInteger newScore = score;

Thank you.

微暖i 2024-09-02 08:50:57

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

NSInteger i = *score;

文档 表明 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

They should be directly compatible on a 64-bit machine (or if you build with NS_BUILD_32_LIKE_64):

NSInteger i = *score;

The documentation indicates that the definition of NSInteger looks like this:

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

So on a 32-bit machine you might have some truncation issues to deal with. On my machine here, this statement:

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

gives this output:

2010-03-19 12:30:18.161 app[30675:a0f] 8 8
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文