我正在尝试解码某人的字节数组,而我却陷入了这个部分:
< state > ::= "01" <i>(2 bits) for A</i>
"10" <i>(2 bits) for B</i>
"11" <i>(2 bits) for C</i>
我想这要我查看下一个字节的下两位。这是否意味着字节的最小或最高位数?我想如果它意味着最不重要的话,我会丢掉最后的6位?
我发现这段代码用于查看字节的位:
for (int i = 0; i < byteArray.Length; i++)
{
byte b = byteArray[i];
byte mask = 0x01;
for (int j = 0; j < 8; j++)
{
bool value = b & mask;
mask << 1;
}
}
有人可以扩展它的确切功能吗?
答案 0 :(得分:1)
只是为了一个开始:
要提取字节的各个位,请使用“&amp;”,称为按位和运算符。按位和操作意味着“保留在两侧设置的所有位”。例如。当你计算按位和两个字节时,例如00000011&amp; 00000010,则结果为00000010,因为只有第二个位置的位在两侧都设置了。
在java编程语言中,同样的例子如下所示:
int a = 3;
int b = 2;
int bitwiseAndResult = a & b; // bitwiseAndResult will be equal to 2 after this
现在要检查是否设置了某个int的第n位,你可以这样做:
int intToExamine = ...;
if ((intToExamine >> n)) & 1 != 0) {
// here we know that the n'th bit was set
}
&gt;&gt;被称为bitshift运算符。它只是将位从左向右移动,如下所示:00011010&gt;&gt; 2将得到结果00000110。
从上面你可以看到,为了提取某个值的第n位,首先将第n位移位到位置0(注意第一位是位0,而不是第1位),然后你使用bitwise和operator(&amp;)来保持那个位0。
以下是按位和位移运算符的一些简单示例: http://www.tutorialspoint.com/java/java_bitwise_operators_examples.htm