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

标签 c# arrays 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;

最佳答案

data[0]>>80 .请记住,您的 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/

相关文章:

c# - 如何在 ASP.Net Core 2.x 中访问服务器变量

javascript - 如何添加动态创建的文本框的所有值

c++ - 人们如何想出按位问题的解决方案?

javascript - 使用php和mysql的条形图

node.js - Nodejs如何发布多个数组

c++ - 当它只有 4 个字节时,float 怎么可能容纳 3.4E38 这样大的数字呢?

c - 二进制符号和字节顺序

c# - 如何打开 RadWindow

c# - 从 RS232(com) 接收数据

java - 如何使用 jackson 反序列化带有索引的数组