You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
88 lines
2.8 KiB
C#
88 lines
2.8 KiB
C#
using System;
|
|
|
|
namespace DataBlockHelper
|
|
{
|
|
public static class BitHelper
|
|
{
|
|
/// <summary>设置数据位</summary>
|
|
/// <param name="value">数值</param>
|
|
/// <param name="position"></param>
|
|
/// <param name="flag"></param>
|
|
/// <returns></returns>
|
|
public static UInt16 SetBit(this UInt16 value, Int32 position, Boolean flag)
|
|
{
|
|
return SetBits(value, position, 1, (flag ? (Byte)1 : (Byte)0));
|
|
}
|
|
|
|
/// <summary>设置数据位</summary>
|
|
/// <param name="value">数值</param>
|
|
/// <param name="position"></param>
|
|
/// <param name="length"></param>
|
|
/// <param name="bits"></param>
|
|
/// <returns></returns>
|
|
public static UInt16 SetBits(this UInt16 value, Int32 position, Int32 length, UInt16 bits)
|
|
{
|
|
if (length <= 0 || position >= 16) return value;
|
|
|
|
var mask = (2 << (length - 1)) - 1;
|
|
|
|
value &= (UInt16)~(mask << position);
|
|
value |= (UInt16)((bits & mask) << position);
|
|
|
|
return value;
|
|
}
|
|
|
|
/// <summary>设置数据位</summary>
|
|
/// <param name="value">数值</param>
|
|
/// <param name="position"></param>
|
|
/// <param name="flag"></param>
|
|
/// <returns></returns>
|
|
public static Byte SetBit(this Byte value, Int32 position, Boolean flag)
|
|
{
|
|
if (position >= 8) return value;
|
|
|
|
var mask = (2 << (1 - 1)) - 1;
|
|
|
|
value &= (Byte)~(mask << position);
|
|
value |= (Byte)(((flag ? 1 : 0) & mask) << position);
|
|
|
|
return value;
|
|
}
|
|
|
|
/// <summary>获取数据位</summary>
|
|
/// <param name="value">数值</param>
|
|
/// <param name="position"></param>
|
|
/// <returns></returns>
|
|
public static Boolean GetBit(this UInt16 value, Int32 position)
|
|
{
|
|
return GetBits(value, position, 1) == 1;
|
|
}
|
|
|
|
/// <summary>获取数据位</summary>
|
|
/// <param name="value">数值</param>
|
|
/// <param name="position"></param>
|
|
/// <param name="length"></param>
|
|
/// <returns></returns>
|
|
public static UInt16 GetBits(this UInt16 value, Int32 position, Int32 length)
|
|
{
|
|
if (length <= 0 || position >= 16) return 0;
|
|
|
|
var mask = (2 << (length - 1)) - 1;
|
|
|
|
return (UInt16)((value >> position) & mask);
|
|
}
|
|
|
|
/// <summary>获取数据位</summary>
|
|
/// <param name="value">数值</param>
|
|
/// <param name="position"></param>
|
|
/// <returns></returns>
|
|
public static Boolean GetBit(this Byte value, Int32 position)
|
|
{
|
|
if (position >= 8) return false;
|
|
|
|
var mask = (2 << (1 - 1)) - 1;
|
|
|
|
return ((Byte)((value >> position) & mask)) == 1;
|
|
}
|
|
}
|
|
} |