我很想知道,是否有可能强行调整C的比照点。 采用以下代码中的变量,我知道,从到_align_bytes,然后从bits读到,由于执行取决于,没有界定(和反之亦然)。 下面的代码是否是一种有效的方法,用以“确保”bits在不签名的短程中同时储存? 我认为(无论最终问题如何),这一法典是正确的......但禁区和工会是我最不熟悉的两个C专题。
我正在开展一个低水平的微观控制器项目,希望一种容易的阅读配置比照方法,没有一吨光罩。 感谢提出任何建议。
Sam
P.S. 请忽略我对结束性所作的任何假设,因为我正在从事的项目水平很低,并非打算运往其他装置/平台。
#include <stdio.h>
#include <assert.h>
typedef union packet {
struct {
unsigned int bit0 : 1;
unsigned int bit1 : 1;
unsigned int bit2 : 1;
unsigned int bit3 : 1;
unsigned int bit4 : 1;
unsigned int bit5 : 1;
unsigned int bit6 : 1;
unsigned int bit7 : 1;
unsigned int bit8 : 1;
unsigned int bit9 : 1;
unsigned int bit10 : 1;
unsigned int bit11 : 1;
unsigned int bit12 : 1;
unsigned int bit13 : 1;
unsigned int bit14 : 1;
unsigned int bit15 : 1;
} bits;
unsigned short _align_bytes;
} packet_t;
int main(int argc, char *argv[]) {
assert(sizeof(unsigned short) == 2);
unsigned short data = 0xA05F;
packet_t *p = (packet_t *)&data;
printf("%u", p->bits.bit15);
printf("%u", p->bits.bit14);
printf("%u", p->bits.bit13);
printf("%u", p->bits.bit12);
printf("%u", p->bits.bit11);
printf("%u", p->bits.bit10);
printf("%u", p->bits.bit9);
printf("%u", p->bits.bit8);
printf("%u", p->bits.bit7);
printf("%u", p->bits.bit6);
printf("%u", p->bits.bit5);
printf("%u", p->bits.bit4);
printf("%u", p->bits.bit3);
printf("%u", p->bits.bit2);
printf("%u", p->bits.bit1);
printf("%u", p->bits.bit0);
return 0;
}