-1

我正在尝试将 512 个字节写为无符号字符,但将它们作为结构中的字段读取。下面是我想出的工会。

typedef union {
    unsigned char buffer[512]; //512 bytes
    struct {
            unsigned char a[446];
            struct part b[4]; //sizeof(part) = 16
            unsigned char c[2];
    }parsed; //446 + 4*16 + 2 = 512 bytes
}tbl;

我可以正确地写入缓冲区,但从 a 或 b 或 c 读取会给出 0。 - 我使用 gcc - 在 64 位 Linux 机器上 - 有/没有 -m32 标志没有区别。

有人可以阐明我所缺少的吗?

4

2 回答 2

1

你真的不应该这样做。由于对齐问题,您的结构很可能大于 512 字节。或者,换句话说,编译器在结构字段之间放置空白空间。

如果您想避免这种情况以降低性能,请查看#pragma pack指令。也许你的编译器支持它。

编辑:另外,请展示你如何写给 buf。如果a也为 0,则可能会出现错误。

于 2013-02-23T07:48:22.363 回答
0

哎呀,对不起。它工作得很好。显然, b[1] 都是零。我将它与 b[0] 字段进行比较。道歉。

于 2013-02-23T08:05:51.873 回答