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

标签 iphone c++ objective-c struct

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

相关文章:

iphone - 将导航栏剪辑到 ScrollView

c++ - 使用 readability-identifier-naming 时,clang-tidy 将 namespace 视为全局变量

c++ - 绑定(bind)两个参数

objective-c - 在 UITableView header 中包含的 UIImageView 上设置 accessibilityLabel

ios - 在 Swift 中将数据传递给另一个 ViewController

iphone - UIImage 大小取决于 UITableViewCell 高度

iphone - NSTimezone没有提供GMT +或GMT-甲酸酯iphone?

c++ - g++ 链接可能尚未编译的 .so 库

objective-c - 如何在Cocoa OpenGLView中使用glClearBuffer*来清除颜色缓冲区

objective-c - 在我的应用程序 IOS 中嵌入流媒体播放器