int32_t 到 NSInteger 的转换是否有任何问题?

发布于 2024-10-27 10:19:04 字数 106 浏览 4 评论 0原文

我正在使用数据类型 int32_t 为 iOS 创建位掩码。然后将其设置为接受 NSInteger 的变量。这不会像预期的那样抛出编译时错误,但我想知道 - 是否有某种方法可以在将来导致运行时错误?

I am creating a bitmask for the iOS using the data type int32_t. This is then set to a variable that accepts an NSInteger. This throws no compile time errors as expected, but I was wondering - is there was some way that this could cause run-time errors in the future?

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

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

发布评论

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

评论(1

听风念你 2024-11-03 10:19:04

一般来说,它会起作用。 NSInteger 的长度始终至少为 32 位。如果是 64 位,您的数字将进行符号扩展以匹配(您可能需要对其进行强制转换)。它不会导致运行时错误。


关于 NSInteger 的详细信息

NSInteger 是使用以下代码定义的(来自 NSObjCRuntime.h):

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

这意味着在编译时 NSInteger 相当于 long 64 位、嵌入式操作系统、iPhone、Windows,或构建 32 位(如 64 位)时。否则,它相当于int。由于 intint32_t 是等效的,因此在 OS X 上的 32 位应用程序中是可以的。对于其他情况,这取决于 long 的大小代码>.

在 64 位 OS X 应用程序中,long 是一个 64 位数字。在 iPhone 上,long 是一个 32 位数字。我不了解 Windows,并且我不确定在构建 32 位(如 64 位)时它是否使用 32 位或 64 位长度。

In general, it will work. NSInteger will always be at least 32 bits long. If it is 64 bits, your number will be sign extended to match (you might need to cast it). It will not cause run-time errors.


Detailed info about NSInteger

NSInteger is defined using the following code (from NSObjCRuntime.h):

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

This means that NSInteger is equivalent to long when compiling for 64 bit, an embedded OS, iPhone, Windows, or when building 32 bit like 64 bit. Otherwise, it is equivalent to int. Since int and int32_t are equivalent, you will be OK in 32 bit applications on OS X. For the other situations, it depends on the size of long.

In 64 bit OS X applications, long is a 64 bit number. On the iPhone, long is a 32 bit number. I do not know about Windows, and I am not sure whether it uses the 32 bit or 64 bit long when building 32 bit like 64 bit.

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