[转]C# 设置和获取一个字节的某一位的值的方法
原网页:http://blog.csdn.net/mao_mao37/article/details/52584383
|
自己工作中遇到需要对单字节的高位、低位进行赋值,即一个字节byte,想要给每一位都赋值,这个值是动态来的,是0或是1。 好不容易收集到一些珍贵资料,整理一下: 一、设置 方法code: /// <summary> 调用code: byte s = set_bit(8, 8, true); 结果: s 的值为 136, 结果正确。 二、获取值 获取一个字节中的每一位的值,需要分别与128 64 32 16 8 4 2 1相与&运算 假设字节为byte1
另外,收集到网络上的其他资料: 引用:http://topic.csdn.net/u/20100121/11/66a2561e-49de-48d6-b0aa-4f3d1fea62e4.html 你好,感谢你阅读此帖.
恳请大家指正,另外我想把它变成能处理不同数据类型的方法,比如运用范型,但是不知道怎么使用,请大家帮帮忙. 我看到C#中还有一些位操作的类,比如BitArray,BitVector32,好像都不合适,BitConvert好像也只是针对对字节流的转换 不知道大家有没有更好的方法,欢迎大家讨论. 祝你工作顺利,天天开心.
回复: 想看那一位是1就把第几位设置为1,其他设置为0,同input进行与操作,返回,大于0则是1,==0则是0. 回复: //index从0开始 回复: private static int GetbitValue(byte input, int index) 回复: //每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));
|

浙公网安备 33010602011771号