二进制开关工具类

来源:互联网 发布:js判断ios版本号 编辑:程序博客网 时间:2024/06/06 10:55

应用内含有太多开关,故选择用二进制码表达开关状态,感谢color_wind的文章,根据自己的业务逻辑做了一些小的修改,但在使用过程中发现一些小问题,也已修改。

/** *@className: BinarySwitchUtils *@description:  *@author ZHANGKAIRUI *@date 2017/10/19 15:22 */public class BinarySwitchUtils {    /**     * 获取当前index状态,[0,1];     *     * @param value 存储的开关数据int32     * @param index 开关索引     * @return 当前位置的值     */    public static boolean getSwitch(int value, int index) {        return (value >> index & 1) == 1;    }    /**     * 处理后的存储数据 int32     *     * @param value 存储的开关数据int32     * @param index 开关索引     * @param set   开关状态     * @return 当前位置的值[0,1]     */    public static int createSwitch(int value, int index, boolean set) {        if (set) {            value = 1 << index | value;        } else {            value = ~(1 << index) & value;        }        return value;    }    /**     * 组装二进制开关串     *     * @param switchArray     * @return     */    public static String createSwitches(Integer[] switchArray) {        int data = 0;        StringBuilder binaryBuilder = new StringBuilder();        for (int i = 0; i < switchArray.length; i++) {            if (switchArray[i] != null) {                boolean sign = switchArray[i] == 0 ? false : true;                data = createSwitch(data, i, sign);            }        }        //补齐最后一位的0        String binaryStr = Integer.toBinaryString(data);        if (!StringUtils.isEmpty(binaryStr) && (binaryStr.length() != switchArray.length)) {            Integer indexOffset = switchArray.length - binaryStr.length();            if(indexOffset > 0){                for (int i = 0; i < indexOffset; i++) {                    binaryBuilder.append("0");                }            }        }        //补齐有效二进制        binaryBuilder.append(binaryStr);        return binaryBuilder.toString();    }}


原创粉丝点击