109,900
社区成员




/// <summary>
/// 获取数据中某一位的值
/// </summary>
/// <param name="input">传入的数据类型,可换成其它数据类型,比如Int</param>
/// <param name="index">要获取的第几位的序号,从0开始</param>
/// <returns>返回值为-1表示获取值失败</returns>
private int GetbitValue(byte input,int index)
{
if (index > sizeof(byte))
{
return -1;
}
//左移到最高位
int value = input << (sizeof(byte) - 1 - index);
//右移到最低位
value = value >> (sizeof(byte) - 1);
return value;
}
/// <summary>
/// 获取数据中某一位的值
/// </summary>
/// <param name="input">传入的数据类型,可换成其它数据类型,比如Int</param>
/// <param name="index">要获取的第几位的序号,从0开始</param>
/// <returns>返回值为-1表示获取值失败</returns>
private int GetbitValue( int input, int index )
{
return ( input & ( ( uint )1 << index ) ) > 0 ? 1 : 0;
}
//每8位为一个字节
private const int bitCout = 8;
///查询对象内存第index位值
static int GetValueOfIndex(object obj, int index)
{
int size = Marshal.SizeOf(obj);
System.IntPtr intPtr = Marshal.AllocHGlobal(size);
Marshal.StructureToPtr(obj,intPtr,true);
byte[] byteArr = new byte[size];
Marshal.Copy(intPtr,byteArr,0,size);
int count;
index = Math.DivRem(index, 8, out count);
Marshal.FreeHGlobal(intPtr);
return (byteArr[size-index-1] >> (8-count-1)) & 1;
}
for (int i = 0; i < 32; i++)
{
int j = (int)Math.Pow(2, i);
Console.WriteLine(j + " : " + GetValueOfIndex(j, 31 - i));
}
Console.WriteLine(15.0f + " : " + GetValueOfIndex(13, 28));