gpt4 book ai didi

iphone - 什么时候 sizeof(int) 在 Objective-C 中不是 4 个字节?

转载 作者:太空狗 更新时间:2023-10-30 03:47:04 28 4
gpt4 key购买 nike

我正在使用一个开源网络框架,它使开发人员可以轻松地通过在 Objective-C 中使用 Bonjour 找到的服务进行通信。

有几行让我紧张了一段时间,尽管它们似乎从未在我测试过的任何机器上造成任何问题,无论我运行的是 64 位还是 32 位- 我的应用程序的位版本:

int packetLength = [rawPacketData length];
[outgoingBuffer appendBytes:&packetLength length:sizeof(int)];
[outgoingBuffer appendData:rawPacketData];
[self writeToStream];

请注意,发送的第一条信息是数据包的长度,这是非常标准的,然后发送数据本身。让我害怕的是长度的长度。一台机器会假设一个 int 是 4 个字节,而另一台机器认为一个 int 是 8 个字节吗?

如果这两种尺寸在不同的机器上可能不同,会是什么原因造成的?它取决于我的编译器,还是最终用户的机器架构?最后,如果这是一个问题,我如何获取一个 8 字节的 int 并将其缩减为 4 字节以确保向后兼容? (因为我永远不需要超过 4 个字节来表示数据包的大小。)

最佳答案

你不能假设 sizeof(int)永远是四个字节。如果大小很重要,您应该将大小硬编码为 4(并编写代码以将值序列化为具有适当字节顺序的四字节数组),或者使用类似 int32_t 的类型。在 <stdint.h> 中定义.

(但是,作为实际问题,大多数编译器供应商已决定 int 应保留四个字节,因此您可能不必担心明天一切都会崩溃。话又说回来,它不久前,许多编译器供应商让 int 成为两个字节,当 ints 成为四个字节时会导致许多问题,所以你真的应该以正确的方式做事,以防止将来发生变化。)

关于iphone - 什么时候 sizeof(int) 在 Objective-C 中不是 4 个字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5220683/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com