gpt4 book ai didi

iphone - Objective-C 和 C++ 中结构的大小

转载 作者:太空狗 更新时间:2023-10-29 21:49:13 26 4
gpt4 key购买 nike

我正在将一些 Objective-C++ 代码转换为纯 Objective-C,但我在使用结构时遇到了一些问题。对于这两种语言,我都在 .h 文件中声明了这样的结构。

struct BasicNIDSHeader {
short messageCode;
short messageDate;
int messageTime;
int messageLength;
short sourceID;
short destID;
short numberOfBlocks;
};

在 C++ 中,结构的声明方式如下

BasicNIDSHeader header;

在 Objective-C 中我这样做

struct BasicNIDSHeader header;

使用它们的代码在两种语言中实际上是相同的。

memset(&header, 0, sizeof(header));
[[fileHandle readDataOfLength:sizeof(header)] getBytes:&header];

其中 fileHandle 是一个 NSFileHandle。

问题出在原始 C++ 代码中,sizeof(header) = 18。使用 Objective-C 时,sizeof(header) = 20。

知道为什么会发生这种情况或如何解决吗?代码取决于大小,就像在 C++ 中一样。我可以对它进行硬编码,但想更好地理解它发生的原因。另外,我讨厌硬编码常量。

谢谢!

最佳答案

如果您依赖于您的struct 的内部内存结构——您应该禁用填充。这称为“打包”,不同的编译器有不同的信号发送方式。

在 GCC 中,您可以使用 __attribute__ 关键字来执行此操作。详情 here .

关于iphone - Objective-C 和 C++ 中结构的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8719240/

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