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