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)
data[0]>>8是0.请记住,你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位,只是为了简单!