我正在将一些 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/