RT,這種結構最後一次賦值會把之前的賦值覆蓋掉,所以很好奇請問一下這種東西一般應用在什麼場景呢?
省內存,方便取高低位元組
最初目的就是為了節省內存,你想當初C語言在上個世紀八十年代才開始大規模使用,那時的內存很寶貴的。
可以提供對同一段資料不同的存取介面。 。 。 舉個例子,曾經做嵌入式的時候,可以這樣寫:
// 没有字节对齐,或者字节对齐为1,int 占4字节 typedef union { unsigined int num; struct { unsigned char byte0; unsigned char byte1; unsigned char byte2; unsigned char byte3; } bytes; } Demo;
不過這樣寫也不太簡潔,而且這段程式碼在 PC 裡面和直接透過位移取每一個位元組效率是一樣的。只是舉個例子,不要太糾結。
一般用來判斷大小端
在嵌入式開發中用的比較多,我這裡給個例子,和上面 @zonxin 的差不多
typedef struct __regular_descriptor_4_high { union { U32 value; struct { U32 raid_id0 : 4; U32 raid_cmd0 : 4; U32 raid_id1 : 4; U32 raid_cmd1 : 4; U32 raid_id2 : 4; U32 raid_cmd2 : 4; U32 raid_id3 : 4; U32 raid_cmd3 : 4; } reg_des_bit; } u; } reg_des_4_high;
要讀取整個暫存器可以讀value,要寫不同的bit-filed就用reg_des_bit來寫。
省內存,方便取高低位元組
最初目的就是為了節省內存,你想當初C語言在上個世紀八十年代才開始大規模使用,那時的內存很寶貴的。
可以提供對同一段資料不同的存取介面。 。 。
舉個例子,曾經做嵌入式的時候,可以這樣寫:
不過這樣寫也不太簡潔,而且這段程式碼在 PC 裡面和直接透過位移取每一個位元組效率是一樣的。只是舉個例子,不要太糾結。
一般用來判斷大小端
在嵌入式開發中用的比較多,我這裡給個例子,和上面 @zonxin 的差不多
要讀取整個暫存器可以讀value,要寫不同的bit-filed就用reg_des_bit來寫。