如何在字节数组中读取单个比特?

3

问题是我有一个200个索引的字节数组,只想检查MyArray [75]的第四位是零(0)还是一(1)。

byte[] MyArray; //with 200 elements

//check the fourth BIT of  MyArray[75]

“第四位”是什么意思?是指第三位还是第四位? - Nosredna
3个回答

8
第75个元素中的第四位是什么?
if((MyArray[75] & 8) > 0) // bit is on
else // bit is off

& 运算符可以将一个值用作掩码。

xxxxxxxx = ?
00001000 = 8 &
----------------
0000?000 = 0 | 8

您可以使用相同的技巧来收集任何比特值。
1   = 00000001
2   = 00000010
4   = 00000100
8   = 00001000
16  = 00010000
32  = 00100000
64  = 01000000
128 = 10000000

实际上8将是第3位。 - H H
@ssg,那么零位是什么? - Nosredna
是的,我的错(-: 我也编辑了自己的答案。 - H H
1
不,8是从最低有效端数起的第四位。如果你想从最高有效端数开始计数,那么它就是第五位。 - Jason Williams
1
考虑到他在问这个问题,可以非常安全地假设他没有使用 “零位” 一词。无论如何,我认为他将有足够的信息来找出答案。 ;) - Spencer Ruport
显示剩余4条评论

4

Something like:

if ( (MyArray[75] & (1 << 3)) != 0)
{
   // it was a 1
}

假设您指的是从右边数起的第4位。
您可能想要查看System.Collections.BitArray,以确保您没有重新发明轮子。

或者根据他对第四位的含义是什么,可能是1<<3。 - Nosredna

2
    private bool BitCheck(byte b, int pos)
    {
        return (b & (1 << (pos-1))) > 0;
    }

2
你一直在使用那个^运算符,我觉得它不是你想象中的意思。 - Tyler McHenry
^ 是按位异或,而不是表示幂的意思。 - pjp
我认为Tyler的意思是,如果你正在寻找针对1索引位置的1 << (pos-1)语句,或者是针对0索引位置的1 << pos语句。 - maxwellb
我进行了mpbloch的替换并取消了负评。Tank似乎是新来的,所以我想我可以这样做。 - Nosredna

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接