我试图将512字节写为unsigned char,但将它们作为结构中的字段读取。以下是我提出的工会。
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标志没有区别。
有人可以把我失踪的东西弄清楚吗?
答案 0 :(得分:1)
你真的不应该这样做。最有可能的是,由于对齐问题,您的结构大于512字节。或者,换句话说,编译器在结构字段之间放置空格。
如果您想避免性能损失,请查看#pragma pack
指令。也许你的编译器支持它。
a
也为0,那么您可能会遇到错误。
答案 1 :(得分:0)
哎呀,抱歉。它工作得很好。显然,b [1]都是零...我将它与b [0]字段进行比较。道歉。