在实际应用中,例如定义报文头,或定义如何存储一些按bit位进行对应的结构,使用位域是个很好的思路。而与union配合,则能做到即能方便地给结构赋值,又能直观地读取相应的数据。要注意的是,要对大小端两种情况分别定义结构体。
示例程序如下:
#include <stdio.h>
#include <stdlib.h>
#define BIGENDIAN
typedef unsigned int UINT;
typedef struct IfindexRuleMap{
#ifdef BIGENDIAN //byte-order of windows is big-endian
UINT id : 16;
UINT id_reserved : 4;
UINT module : 7;
UINT slot : 4;
UINT ne : 1;
#else
UINT ne : 1;
UINT slot : 4;
UINT module : 7;
UINT id_reserved : 4;
UINT id : 16;
#endif
}IfindexRuleMap_S;
typedef union IfindexUnion{
UINT ifindex;
IfindexRuleMap_S stIfindex;
}IfindexUnion_U;
void main()
{
IfindexUnion_U ifu;
ifu.ifindex = 0x80100001; //test code -- from UINT to each unit
// ifu.ifindex = 0; //test code -- from each unit to UINT
// ifu.stIfindex.ne = 1;
// ifu.stIfindex.module = 1;
// ifu.stIfindex.id = 1;
printf("ifindex = %08X\r\n", ifu.ifindex);
printf("ifu.stIfindex.ne = %08X\r\n", ifu.stIfindex.ne);
printf("ifu.stIfindex.module = %08X\r\n", ifu.stIfindex.module);
printf("ifu.stIfindex.id = %08X\r\n", ifu.stIfindex.id);
system("pause");
}
如需转载,请注明出处。