大家好,有一个项目需要对接收的数据进行校验,数据第二位是功能码,目前功能码有0x02,0x03,0x04,0x06,0x08,0x09。校验有两个条件:一个是第二位的功能码是我们目前有的,另一个是接收的数据长度小于DEVICE_RECEIVE_DATA_MAX_LEN/8,不满足则退出,下面是我的代码:
/*判断数据异常*/
if((1 == m_dwcurIndex && (0x02 != Ch && 0x03 != Ch && 0x04 != Ch && 0x06 != Ch && 0x08 != Ch && 0x09 != Ch)) || m_dwcurIndex >= DEVICE_RECEIVE_DATA_MAX_LEN/8)
{
SetRecvDataState(FALSE);
m_dwcurIndex = 0;
m_dwRecvLen = 0;
return;
}
目前我的校验逻辑功能可以满足项目需要,但是如果功能码变成十几个,这样逻辑判断就会变得冗余,这个判断逻辑怎么写比较简洁?
你的ch几乎没任何规律可言
boolean isOk;
switch (Ch) {
case 0x02:
case 0x03:
case 0x04:
case 0x06:
case 0x08:
case 0x09:
isOk = true;
break;
default:
isOk = false;
break;
}
private int[] Chs = {0x02, 0x03, 0x04, 0x06, 0x08, 0x09};
private boolean containsCh(int Ch) {
for (int c : Chs) {
if (c == Ch) {
return true;
}
}
return false;
}
protected void initData(int Ch) {
if (!containsCh(Ch)) {
// ...
}
}
这2种方案,你自己选一个吧
https://www.cnblogs.com/IT-Server/archive/2007/01/18/623679.html