我想这很简单。
我需要从前 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;
最佳答案
data[0]>>8
是0
.请记住,您的 data
定义为 byte[]
所以它每个项目有 8 位,所以你有效地切断了 data[0]
的所有位.
您更想通过按位与 (00001111 = 0F) 从该字节中取出最低 4 位,然后根据需要将其向左移动。
那么试试这个:
var _4bit = data[0] >> 4;
var _12bit = ((data[0] & 0x0F) << 8) | (data[1] & 0xff);
还值得注意的是,最后一个 & 0xFF
不需要,因为 data[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 位只是为了使其简洁!
关于c# - 从 C# 中的 2 个字节的最后 12 位获取整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25043808/