[C#]我自己写的一个对字节中每位进行修改值的函数
生活随笔
收集整理的這篇文章主要介紹了
[C#]我自己写的一个对字节中每位进行修改值的函数
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
位操作方法
代碼如下:
1. 設置字節中某位的值
static public Byte s_SetBit(Byte byTargetByte, int nTargetPos, int nValue) {int nValueOfTargetPos = -1;if (nValue != 0 && nValue != 1){return 0;}if (!(nTargetPos >= 0 && nTargetPos < 8)){return 0;}switch (nTargetPos){case 0:nValueOfTargetPos = (byTargetByte >> 7) & 0x01;if (nValue == 1){byTargetByte = Convert.ToByte(byTargetByte | 0x80);}else if (nValue == 0){byTargetByte = Convert.ToByte(byTargetByte & 0x7f);}break;case 1:nValueOfTargetPos = (byTargetByte >> 6) & 0x01;if (nValue == 1){byTargetByte = Convert.ToByte(byTargetByte | 0x40);}else if (nValue == 0){byTargetByte = Convert.ToByte(byTargetByte & 0xbf);}break;case 2:nValueOfTargetPos = (byTargetByte >> 5) & 0x01;if (nValue == 1){byTargetByte = Convert.ToByte(byTargetByte | 0x20);}else if (nValue == 0){byTargetByte = Convert.ToByte(byTargetByte & 0xdf);}break;case 3:nValueOfTargetPos = (byTargetByte >> 4) & 0x01;if (nValue == 1){byTargetByte = Convert.ToByte(byTargetByte | 0x10);}else if (nValue == 0){byTargetByte = Convert.ToByte(byTargetByte & 0xef);}break;case 4:nValueOfTargetPos = (byTargetByte >> 3) & 0x01;if (nValue == 1){byTargetByte = Convert.ToByte(byTargetByte | 0x08);}else if (nValue == 0){byTargetByte = Convert.ToByte(byTargetByte & 0xf7);}break;case 5:nValueOfTargetPos = (byTargetByte >> 2) & 0x01;if (nValue == 1){byTargetByte = Convert.ToByte(byTargetByte | 0x04);}else if (nValue == 0){byTargetByte = Convert.ToByte(byTargetByte & 0xfb);}break;case 6:nValueOfTargetPos = (byTargetByte >> 1) & 0x01;if (nValue == 1){byTargetByte = Convert.ToByte(byTargetByte | 0x02);}else if (nValue == 0){byTargetByte = Convert.ToByte(byTargetByte & 0xfd);}break;case 7:nValueOfTargetPos = byTargetByte & 0x01;if (nValue == 1){byTargetByte = Convert.ToByte(byTargetByte | 0x01);}else if (nValue == 0){byTargetByte = Convert.ToByte(byTargetByte & 0xfe);}break;default:break;}if (nValueOfTargetPos != -1){return byTargetByte;}else{return 0;} }測試案例:
把每位全為1的字節置0
Byte b = Convert.ToByte(0xff); richTextBoxMain.Text = "byte初始狀態: " + Convert.ToString(b, 2).PadLeft(8, '0') + "\r\n"; for (int i = 0; i < 8; i++) {b = s_SetBit(b, i, 0);richTextBoxMain.Text += "byte修改第" + i + "位后的結果: ";richTextBoxMain.Text += Convert.ToString(b, 2).PadLeft(8, '0') + "\r\n"; }結果如下:
byte初始狀態: 11111111
byte修改第0位后的結果: 01111111
byte修改第1位后的結果: 00111111
byte修改第2位后的結果: 00011111
byte修改第3位后的結果: 00001111
byte修改第4位后的結果: 00000111
byte修改第5位后的結果: 00000011
byte修改第6位后的結果: 00000001
byte修改第7位后的結果: 00000000
?
?
2. 獲得字節中某位的值
static public int s_GetBit(Byte byTargetByte, int nTargetPos) {int nValue = -1;switch (nTargetPos){case 0:nValue = (byTargetByte >> 7) & 0x01;break;case 1:nValue = (byTargetByte >> 6) & 0x01;break;case 2:nValue = (byTargetByte >> 5) & 0x01;break;case 3:nValue = (byTargetByte >> 4) & 0x01;break;case 4:nValue = (byTargetByte >> 3) & 0x01;break;case 5:nValue = (byTargetByte >> 2) & 0x01;break;case 6:nValue = (byTargetByte >> 1) & 0x01;break;case 7:nValue = byTargetByte & 0x01;break;default:break;}return nValue; }?
?
轉載于:https://www.cnblogs.com/jingmoxukong/archive/2011/07/27/2118291.html
總結
以上是生活随笔為你收集整理的[C#]我自己写的一个对字节中每位进行修改值的函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [php]数据结构算法(PHP描述) 半
- 下一篇: 电脑辐射危害