public static int ExtractSigned(uint InitialValue, int Offset, int Count)
{
var Mask = CreateMask(Count);
uint SignBit = (uint)(1 << (Offset + (Count - 1)));
uint _Value = (uint)((InitialValue >> Offset) & Mask);
if ((_Value & SignBit) != 0)
{
_Value |= ~Mask;
}
return (int)_Value;
}