Lion1505 发表于 2017-4-24 08:11

【总结】位操作类


/// <summary>
/// 位操作类
/// </summary>
public static class BitHelper
{
        /// <summary>
        /// 获取某个位
        /// </summary>
        /// <param name="byt"></param>
        /// <param name="index"></param>
        /// <returns></returns>
        public static byte GetBit(this byte byt, int index)
        {
                return (byte)((byt >> index) & 1);
        }

        /// <summary>
        /// 获取字节的某些位
        /// </summary>
        /// <param name="byt">字节数组</param>
        /// <param name="index">起始位置</param>
        /// <param name="len">长度</param>
        /// <returns></returns>
        public static byte GetBit(this byte byt, int index, int length)
        {
                byte mask = GetMask(length);
                return (byte)((byt >> index) & mask);
        }

        /// <summary>
        /// 获取屏蔽位
        /// </summary>
        /// <param name="length"></param>
        /// <returns></returns>
        public static byte GetMask(int length)
        {
                return (byte)((1 << length) - 1);
        }

        /// <summary>
        /// 获取屏蔽位
        /// </summary>
        /// <param name="index"></param>
        /// <param name="length"></param>
        /// <returns></returns>
        public static byte GetMask(int index, int length)
        {
                byte mask = GetMask(length);
                return (byte)(mask << index);
        }

        /// <summary>
        /// 清0
        /// </summary>
        /// <param name="byt"></param>
        /// <param name="index"></param>
        public static byte ClearBit(this byte byt, int index)
        {
                return byt &= (byte)(~(1 << index));
        }

        /// <summary>
        /// 清除字节的某些位
        /// </summary>
        /// <param name="byt">字节数组</param>
        /// <param name="index">起始位置</param>
        /// <param name="len">长度</param>
        public static byte ClearBit(this byte byt, int index, int length)
        {
                byte mask = GetMask(index, length);
                return byt &= (byte)(~mask);
        }

        /// <summary>
        /// 某位置1
        /// </summary>
        /// <param name="byt"></param>
        /// <param name="index"></param>
        public static byte SetBit(this byte byt, int index)
        {
                return byt |= (byte)(1 << index);
        }

        /// <summary>
        /// 某些位置1
        /// </summary>
        /// <param name="byt"></param>
        /// <param name="index"></param>
        /// <param name="length"></param>
        public static byte SetBit(this byte byt, int index, int length)
        {
                byte mask = GetMask(index, length);
                return byt |= (byte)mask;
        }

        /// <summary>
        /// 设置字节的某些位
        /// </summary>
        /// <param name="byt">字节数组</param>
        /// <param name="index">起始位置</param>
        /// <param name="len">长度</param>
        /// <param name="value">设置值</param>
        public static byte SetBit(this byte byt, int index, int length, int value)
        {
                int mask = GetMask(length);
                byt = byt.ClearBit(index, length);
                return byt |= (byte)((value & mask) << index);
        }

        /// <summary>
        /// 取反
        /// </summary>
        /// <param name="byt"></param>
        /// <param name="index"></param>
        /// <param name="length"></param>
        public static byte ReverseBit(this byte byt, int index, int length)
        {
                byte mask = GetMask(index, length);
                return byt ^= mask;
        }

        /// <summary>
        /// 某位取反
        /// </summary>
        /// <param name="byt"></param>
        /// <param name="index"></param>
        public static byte ReverseBit(this byte byt, int index)
        {
                return byt ^= (byte)(1 << index);
        }

        /// <summary>
        ///
        /// </summary>
        /// <param name="byt"></param>
        /// <param name="index"></param>
        /// <param name="len"></param>
        /// <returns></returns>
        public static UInt16 ClearBit(this UInt16 data, int index, int length)
        {
                int mask = (2 << length) - 1;
                return (UInt16)(data & (~(mask << index)));
        }
}

ps122 发表于 2017-4-24 08:28

收藏了,谢谢分享

乐知 发表于 2017-4-24 10:38

虽然不在自己范围内,手动支持下

adime 发表于 2017-4-25 15:45

支持一下,虽然我不学这个

因素 发表于 2017-4-30 16:54

分享精神必须支持!!{:5_116:}

☆邪梦 发表于 2017-4-30 18:50

暂时没学C#,感谢楼主分享精神,
页: [1]
查看完整版本: 【总结】位操作类