C语言之联合体通用变量类型之妙用
生活随笔
收集整理的這篇文章主要介紹了
C语言之联合体通用变量类型之妙用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
當我們用C語言進行編程時,經常遇到需要將不同類型的變量進行類型轉換,我們用得比較多的都是用強轉方式進行轉換。但是如果我們定義了一個結構體,而這個結構體的成員對象有可能是u8、int_8t、u16、int_16t......等等。那這時候該怎么解決這個問題呢?具體如下:
// ---parameterSet.htypedef union {u16 toDataU16; int16_t toDataI16; u8 toDataU8; int8_t toDataI8; char toByte[2]; }byte2Union; // 占用2個字節的聯合體typedef struct {u8 ?? ??? ??? ?setOID;?? ?? // 標識符byte2Union ?? ?setData;?? ??// 待設置值byte2Union ?? ?currentData;?// 值byte2Union ?? ?minData;?? ??// 最小值(包含)byte2Union ?? ?maxData;?? ??// 最大值(包含)?? ?u8 ?? ??? ??? ?setFlag;?? ??// 需要設置標志u8?? ??? ? notSetFlag;??// 無需設置到底層模塊(0:需要設置 1:不需要設置)?????? ??? ?u8 ?? ??? ??? signFlag;?? ?// 有符號標志u8 ?? ??? ??? ?Length; //標識符數據長度u32 ?? ??? ??? Address; ? // 存儲地址void (*function)(u8 * ,u16); ?// 備注函數指針,處理一些特殊情況?? ? } parameterSetStruct;?? ??? ??上面的程序內容中setData、currentData、?minData? 、maxData?這幾個變量存在需要接收不同長度和類型的數據,我們這邊需要接收最長兩個字節的數據類型,所以我們定義一個聯合體,該聯合體占用兩個字節空間。同時,在聯合體中,我們定義多個不同的類型表達形式名稱。這樣當我們需要用到不同類型時,只需要如下操作:
//-----mian.c #include "parameterSet.h"static parameterSetStruct parameterSet = {0};int main(void) {parameterSet.setData.toByte[0] = 0x80;parameterSet.setData.toByte[1] = 0x01;if((parameterSet.setData.toDataU16 > parameterSet.minData.toDataU16) &&(parameterSet.setData.toDataU16 < parameterSet.maxData.toDataU16)){parameterSet.currentData.toDataU16 = parameterSet.setData.toDataU16;} }? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
?
總結
以上是生活随笔為你收集整理的C语言之联合体通用变量类型之妙用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pro4重影花屏 surface_【图】
- 下一篇: Photoshop Scripting