原網頁: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));
|
