Objective-C和c++中结构体的大小
Size of Structs in Objective-C and C++
我正在将一些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
s的内部内存结构-您应该禁用填充。这被称为"打包",不同的编译器有不同的方式来标记它。
在GCC中,您可以使用__attribute__
关键字来完成此操作。细节。
我只能为c++发言。在c++中有一个特定的实现特性,它可以在特定的地址上对齐数据,以便有效地处理数据。
在MS Visual c++中,你可以使用一个pragma来强制字节对齐:
#pragma pack(1)
相关文章:
- 根据用户回答声明"Players"。用户选择玩家数量。播放器是结构体
- 结构体 S { int align; } 之间的区别;(struct 关键字后的名称)和 struct { int al
- C++ - 如何在结构向量中找到结构体一个成员的最大值?
- 包含 std::list 的结构体的 C++ 初始化
- 结构体和类的不同大小(),彼此具有相同的字段类型
- 如何使用结构体的向量数组?
- 如何使用结构体在C++中更改这些代码?
- 无法在 Mosquitto MQTT Broker 插件上访问结构体 mosquitto 的元素
- 我应该如何在C++中使用结构体解决输入失败的问题?
- Qsort() 比较结构体整数的总和
- 如何使用迭代器指向结构体c++的向量
- 在C++中使用链表的堆栈实现中,访问结构体headNode成员count和top会导致运行时错误
- 如何获取结构体成员的地址
- 创建结构体向量,表达式:向量下标超出范围
- boost::任何带有结构体和无符号整数
- 如何在构造函数中初始化结构体的动态数组?
- 只写结构体的某些字段
- C++ push_back() 一个结构体到一个向量中
- C++14 结构体上的统一初始化
- 访问不同类的私有结构体成员