我正在将一些Objective-C++代码转换为普通的Objective-C,并且我遇到了一些结构问题。对于这两种语言,我都有像这样在.h文件中声明的结构体。Objective-C和C++结构体的大小
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(标题)= 18。当使用Objective-C,的sizeof(标题)= 20。
任何想法为什么发生这种情况或如何解决?代码依赖于C++中的大小。我可以对它进行硬编码,但希望更好地了解它为什么会发生。另外我讨厌硬编码常量。
谢谢!
这就是所谓的填充。 – 2012-01-03 22:05:21
你可以使用typedef,然后你不需要修改所有的声明。 – sidyll 2012-01-03 22:06:53
你可以通过在这两种语言中打印'&header','&header.messageCode','&header.messageDate'等来查看是否有改变的地方,并查看是否有间隙,或者末尾是否有填充。 – dasblinkenlight 2012-01-03 22:08:52