c++ - C 结构大小不一致

标签 c++ c struct sizeof

<分区>

Possible Duplicate:
How do I find the size of a struct?
Struct varies in memory size?

我正在使用以下结构进行网络通信,它在两者之间创建了很多不必要的字节。

它给出的大小与预期的 8 字节不同。

struct HttpPacket {
  unsigned char x1;
  union {
        struct {
           unsigned char  len;
           unsigned short host;
           unsigned char content[4];
        } packet;
        unsigned char bytes[7];
        unsigned long num;
    }

即使我要从 union 中删除一个字段,以下也会给出不同的大小

struct HttpPacket {
             unsigned char x1;
             union {
            struct {
               unsigned char  len;
               unsigned short host;
               unsigned char content[4];
            } packet;
            unsigned long num;
        }

另外,一个更清楚的例子

struct {
               unsigned char  len;
               unsigned short host;
               unsigned char content[4];
            } packet;

它给出的大小为 8,而不是 7。 我又添加了一个字段,它仍然给出相同的大小

struct {
               unsigned char  EXTRAADDEDFIELD;
               unsigned char  len;
               unsigned short host;
               unsigned char content[4];
            } packet;

有人可以帮忙解决这个问题吗?

更新:我需要在传输数据包时保留格式,所以我想跳过这些填充

最佳答案

C 不保证struct 的大小。编译器可以根据需要排列成员。通常,在这种情况下,它会使大小字对齐,因为这在大多数机器上是最快的。

关于c++ - C 结构大小不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8539348/

相关文章:

c - 使用 FastCGI 和 NGINX 运行 C 代码

C++ 将 RAII 与多态性和堆栈分配结合使用

c++ - 将函数转换为成员函数?

c - 使用 zlib 将 GZIP 压缩到缓冲区

c - 我的 C 程序从配置中接收一些文件路径的最简单方法是什么?

c - 如何在C中将struct转换为char数组

c++ - C++ 中的多态映射键

c++ - 在 Poco 1.5.x 中重试锁定的 SQLite 数据库

c - 我无法理解结构指针和 XOR 的这种行为

将结构体中的字符数组与用户输入的字符数组进行比较