1. 程式人生 > >C# 設定和獲取一個位元組的某一位的值的方法

C# 設定和獲取一個位元組的某一位的值的方法

自己工作中遇到需要對單位元組的高位、低位進行賦值,即一個位元組byte,想要給每一位都賦值,這個值是動態來的,是0或是1。

好不容易收集到一些珍貴資料,整理一下:

一、設定

方法code:

         /// <summary>
        /// 設定某一位的值
        /// </summary>
        /// <param name="data"></param>
        /// <param name="index">要設定的位, 值從低到高為 1-8</param>
        /// <param name="flag">要設定的值 true / false</param>
        /// <returns></returns>
        byte set_bit(byte data, int index, bool flag)
        {
            if (index > 8 || index < 1)
                throw new ArgumentOutOfRangeException();
            int v = index < 2 ? index : (2 << (index - 2));
            return flag ? (byte)(data | v) : (byte)(data & ~v);
        }

呼叫code:

    byte s = set_bit(8, 8, true);

結果:

    s 的值為 136, 結果正確。

二、獲取值

獲取一個位元組中的每一位的值,需要分別與128 64 32 16 8 4 2 1相與&運算

假設位元組為byte1 

bit8 = byte1 & 128 == 128 ? 1 : 0; 
bit7 = byte1 & 64 == 64 ? 1 : 0; 
bit6 = byte1 & 32 == 32 ? 1 : 0; 
bit5 = byte1 & 16 == 16 ? 1 : 0; 
bit4 = byte1 & 8 == 8 ? 1 : 0; 
bit3 = byte1 & 4 == 4 ? 1 : 0; 
bit2 = byte1 & 2 == 2 ? 1 : 0; 
bit1 = byte1 & 1 == 1 ? 1 : 0;

另外,收集到網路上的其他資料: