69,373
社区成员
发帖
与我相关
我的任务
分享
struct STR
{
u32 ulLocReportPolicy;
......
u16 ......
u8 ......
}
u8 arr[1000] = {0};
STR* pMTParamSetting = (STR*)&arr;
Enum E
{A,B,C,D,E,F,G,H,I,J,K......
}
void setParam(u16 uiParamId, u8* pParam)
{
switch(uiParamId)
{
case LOC_REPORT_POLICY:
pMTParamSetting->ulLocReportPolicy = ulParam;
break;
case A:
pMTParamSetting->ulLocReportPlan = ulParam;
break;
case B:
pMTParamSetting->ulUnlRepTInterval = ulParam;
break;
case C:
pMTParamSetting->ulAcOffRepTInterval = ulParam;
break;
case D:
pMTParamSetting->ulAcOnRepTInterval = ulParam;
break;
case E:
pMTParamSetting->ulEmptyRepTInterval = ulParam;
break;
case F:
pMTParamSetting->ulLoadRepTInterval = ulParam;
break;
case G:
pMTParamSetting->ulSleepRepTInterval = ulParam;
break;
case H:
pMTParamSetting->ulEmyRepTInterval = ulParam;
break;
case I:
pMTParamSetting->ulUnlRepDInterval = ulParam;
break;
case J:
pMTParamSetting->ulAcOffRepDInterval = ulParam;
break;
case K:
pMTParamSetting->ulAcOnRepDInterval = ulParam;
break;
case L:
pMTParamSetting->ulEmptyRepDInterval = ulParam;
break;
case M:
pMTParamSetting->ulLoadRepDInterval = ulParam;
break;
case N:
pMTParamSetting->ulSleepRepDInterval = ulParam;
break;
case O:
pMTParamSetting->ulEmyRepDInterval = ulParam;
break;
case P:
pMTParamSetting->ulConerSupAngle = ulParam;
break;
default:
setMultiMediaParam(uiParamId, pParam);
break;
}
}
代码为简单说明,楼主想过建表和hash的方式进行实现,但是表中都是常量与枚举配对,结构体中成员为变量,这时候如何简化switch呢,通过通用的for进行对结构体中成员进行访问,赋值呢??请朋友们解惑~char* TransOperType(int nOperType) {
switch (nOperType) {
case OPER_UNKNOWN: return "UNKNOWN";
case OPER_PLAY: return "PLAY";
case OPER_RECORD: return "RECORD";
case OPER_GETDIG: return "GETDIG";
case OPER_ACCEPTCALL: return "ACCEPTCALL";
case OPER_ANSWERCALL: return "ANSWERCALL";
case OPER_MAKECALL: return "MAKECALL";
case OPER_DROPCALL: return "DROPCALL";
case OPER_SETBILLING: return "SETBILLING";
case OPER_SENDMOREINFO: return "SENDMOREINFO";
case OPER_DLCACHE: return "DLCACHE";
case OPER_DLMEM: return "DLMEM";
case OPER_STOPCH: return "STOPCH";
case OPER_PUTEVT: return "PUTEVT";
case OPER_SYSNOTIFY: return "SYSNOTIFY";
case OPER_CST: return "CST";
case OPER_GETTRCOUNT: return "GETTRCOUNT";
case OPER_XOIP_SETRESATTR: return "OPER_XOIP_SETRESATTR";
case OPER_XOIP_GETRESATTR: return "OPER_XOIP_GETRESATTR";
case OPER_XOIP_GETSSINFO: return "OPER_XOIP_GETSSINFO";
case OPER_XOIP_STARTMEDIA: return "OPER_XOIP_STARTMEDIA";
case OPER_XOIP_STOP: return "OPER_XOIP_STOP";
case OPER_XOIP_SENDDIGITS: return "OPER_XOIP_SENDDIGITS";
case OPER_XOIP_ENABLEEVENT: return "OPER_XOIP_ENABLEEVENT";
case OPER_XOIP_DISABLEEVENT: return "OPER_XOIP_DISABLEEVENT";
case OPER_XOIP_RECEIVEDIGITS: return "OPER_XOIP_RECEIVEDIGITS";
case OPER_XOIP_SENDRFC2833: return "OPER_XOIP_SENDRFC2833";
case OPER_SENDCPG: return "OPER_SENDCPG";
case OPER_CALLPROCEEDING: return "OPER_CALLPROCEEDING";
case OPER_CALLPROGRESS: return "OPER_CALLPROGRESS";
case OPER_SETUPACK: return "OPER_SETUPACK";
case OPER_SIP_SENDREINVITE: return "OPER_SIP_SENDREINVITE";
case OPER_SIP_SENDREINVITEACK: return "OPER_SIP_SENDREINVITEACK";
case OPER_SIP_SENDREGISTER: return "OPER_SIP_SENDREGISTER";
case OPER_XOIP_SWITCH_VF: return "OPER_XOIP_SWITCH_VF";
case OPER_SIP_SENDINFO: return "OPER_SIP_SENDINFO";
case OPER_SIP_SENDINFOACK: return "OPER_SIP_SENDINFOACK";
case OPER_NR_SCROUTE: return "OPER_NR_SCROUTE";
case OPER_NR_SCUNROUTE: return "OPER_NR_SCUNROUTE";
case OPER_SIP_SENDREGISTERACK: return "OPER_SIP_SENDREGISTERACK";
case OPER_SIP_SENDTRYING: return "OPER_SIP_SENDTRYING";
case OPER_DT_SETTSSIG: return "OPER_DT_SETTSSIG";
case OPER_DT_GETTSSIG: return "OPER_DT_GETTSSIG";
case OPER_SIP_SENDSUBSCRIBE: return "OPER_SIP_SENDSUBSCRIBE";
case OPER_SIP_SENDNOTIFYACK: return "OPER_SIP_SENDNOTIFYACK";
case OPER_GETCONFENERGY: return "OPER_GETCONFENERGY";
case OPER_ESTCONF: return "OPER_ESTCONF";
case OPER_ADDCONF: return "OPER_ADDCONF";
case OPER_REMCONF: return "OPER_REMCONF";
case OPER_DELCONF: return "OPER_DELCONF";
case OPER_SETCDE: return "OPER_SETCDE ";
case OPER_ESTCONF_EX: return "OPER_ESTCONF_EX";
case OPER_ADDCONF_EX: return "OPER_ADDCONF_EX";
case OPER_REMCONF_EX: return "OPER_REMCONF_EX";
case OPER_SETCDE_EX: return "OPER_SETCDE_EX";
case OPER_SETLMASKEX: return "OPER_SETLMASKEX";
case OPER_SS7_SENDEXT: return "OPER_SS7_SENDEXT";
case OPER_FXS_SEND: return "OPER_FXS_SEND";
case OPER_FXS_RECV: return "OPER_FXS_RECV";
case OPER_MO_SETHOOK: return "OPER_MO_SETHOOK";
case OPER_MO_DIAL: return "OPER_MO_DIAL";
case OPER_MS_GENRING: return "OPER_MS_GENRING";
case OPER_MS_WTRING: return "OPER_MS_WTRING";
case OPER_AG_SENDTONE: return "OPER_AG_SENDTONE";
case OPER_RECVFSK: return "OPER_RECVFSK";
case OPER_SENDFSK: return "OPER_SENDFSK";
case OPER_SIP_RECVUPDATE: return "OPER_SIP_RECVUPDATE";
case OPER_SIP_SENDUPDATE: return "OPER_SIP_SENDUPDATE";
case OPER_SIP_RECVUPDATEACK: return "OPER_SIP_RECVUPDATEACK";
case OPER_SIP_SENDUPDATEACK: return "OPER_SIP_SENDUPDATEACK";
case OPER_SIP_RECVACK: return "OPER_SIP_RECVACK";
case OPER_SIP_SENDACK: return "OPER_SIP_SENDACK";
case OPER_SIP_RECVPRACK: return "OPER_SIP_RECVPRACK";
case OPER_SIP_SENDPRACK: return "OPER_SIP_SENDPRACK";
case OPER_SIP_SENDPRACKACK: return "OPER_SIP_SENDPRACKACK";
case OPER_SIP_RECVPRACKACK: return "OPER_SIP_RECVPRACKACK";
default: break;
}
return "UNKNOWN";
}
Enum E
{A,B,C,D,E,F,G,H,I,J,K......
}
为协议中的ID值,所以需要建立一个
typedef struct Map
{
int id;
int addr;
}M;
Enum E
{A,B,C,D,E,F,G,H,I,J,K......
}
Enum Ad
{
ONE = 0,TWO = 4...
};
M arr[1000] = {
{A, ONE},
{B, TWO},
{C,THREE}...
};
当我用的时候
void setParam(u16 uiParamId, u8* pParam)
{
for(int i =0; i < sizeof(arr); ++i)
{
if(uiParamId = arr[i].id)
{
* (pMTParamSetting+arr[i].addr) = pParam;
}
}
}