位操作方法
代码如下:
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;
}
|
本文转自静默虚空博客园博客,原文链接:http://www.cnblogs.com/jingmoxukong/archive/2011/07/27/2118291.html,如需转载请自行联系原作者