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

use*_*573 2 c# bytearray bit-shift bit

我怀疑这很容易.

我需要从前4位得到一个数字,从2字节的最后12位得到另一个数字.

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

byte[] data = new byte[2];
//assume byte array contains data
var _4bit = data[0] >> 4;
var _12bit = data[0] >> 8 | data[1] & 0xff;
Run Code Online (Sandbox Code Playgroud)

que*_*atl 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);
Run Code Online (Sandbox Code Playgroud)

值得注意的是,最后一个& 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;
Run Code Online (Sandbox Code Playgroud)

BTW.另外,请注意&|运算符的结果被输入为int32位,为了清晰起见,我省略了零,并将其写为8位,只是为了简单!