发布于 5年前

c语言接收数据校验判断逻辑怎么更加简洁?

问题描述

有一个项目需要对接收的数据进行校验,数据第二位是功能码,目前功能码有 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;
    }

目前的校验逻辑功能可以满足项目需要,但是如果功能码变成十几个,这样逻辑判断就会变得冗余,这个判断逻辑怎么写比较简洁?

问题分析

方案一

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)) {
//            ...
        }
    }
©2020 edoou.com   京ICP备16001874号-3