【总结】位操作类
/// <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)));
}
}
收藏了,谢谢分享
虽然不在自己范围内,手动支持下 支持一下,虽然我不学这个 分享精神必须支持!!{:5_116:} 暂时没学C#,感谢楼主分享精神,
页:
[1]