我怀疑这很容易。
我需要从前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;
答案 0 :(得分:7)
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);
值得注意的是,不需要最后一个& 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>