从C#中的最后12位2字节获取整数

时间:2014-07-30 18:02:37

标签: c# bytearray bit bit-shift

我怀疑这很容易。

我需要从前4位获得一个数字,从最后12位获得另一个数字 2个字节。

所以这就是我所拥有的,但它似乎并不正确:

byte[] data = new byte[2];
//assume byte array contains data
var _4bit = data[0] >> 4;
var _12bit = data[0] >> 8 | data[1] & 0xff;

1 个答案:

答案 0 :(得分:7)

data[0]>>80。请注意,您的data定义为byte[],因此每个项目有8位,因此您可以有效地从data[0]中删除所有位。

您希望通过按位AND(00001111 = 0F)从该字节中取出最低的4位,然后根据需要向左移动。

所以试试这个:

var _4bit = data[0] >> 4;
var _12bit = ((data[0] & 0x0F) << 8) | (data[1] & 0xff);

值得注意的是,不需要最后一个& 0xFF,因为数据[1]已经是一个字节。

按位,一步一步:

byte[2] data = { aaaabbbb, cccccccc }

var _4bit = data[0] >> 4;
          = aaaabbbb >> 4
          = 0000aaaa

var _12bit = ( (data[0] & 0x0F) << 8) | ( data[1] & 0xff);
           = ((aaaabbbb & 0x0F) << 8) | (cccccccc & 0xff);
           = (     0000bbbb     << 8) | (   cccccccc    );
           = (  0000bbbb000000000   ) | (   cccccccc    );
           =    0000bbbbcccccccc;

顺便说一句。另请注意,&|运算符的结果输入为int,因此32位,为了清晰起见,我省略了零,并将其写为8位,只是为了使其简短! / p>