1,union中可以定义多个成员,union的大小由最大的成员大小决定
2,union成员共享一块大小内存,一次只能使用其中的一个成员
3,对某一成员赋值,会覆盖其他成员的值,ps:因为他们共享一块内存,当成员所占字节数不相同时只会覆盖相应字节上的值,比如char成员赋值就不会把整个int成员覆盖掉,因为char只占一个字节,而int占4个字节
4,union存放顺序是所有成员都从低地址开始存放的
typedef union{
char c;
int a;
int b;
}Demo;
int main(int argc, char **argv)
{
Demo d;
d.c = 'H';
d.a = 10;
d.b = 12;
printf("size: %d\n", sizeof(d));//4
printf("%c\t%d\t%d\n", d.c, d.a, d.b);//12 12
return 0;
}
iOS运用实例
union RecordHead {
struct {
UInt8 second : 8,
minute : 8,
hour : 8,
day : 8,
month : 8,
year : 8,
pluse : 8,
ol : 7,
flag : 1;
} value;
UInt64 data;
};
UInt64 data = (UInt64)strtoull([[self.response substringWithRange:NSMakeRange(dataIndex, 16)] UTF8String], 0, 16);
union RecordHead recordHead;
recordHead.data = data;
NSCalendar *cal = [NSCalendar currentCalendar];
NSDateComponents *components = [[NSDateComponents alloc] init];
components.year = recordHead.value.year + 2000;
components.month = recordHead.value.month;
components.day = recordHead.value.day;
components.hour = recordHead.value.hour;
components.minute = recordHead.value.minute;
components.second = recordHead.value.second;
NSDate *date = [cal dateFromComponents:components];