c# - 如何使用位值解析字节

标签 c#

我必须从保存在三部分位组合中的一个字节中获取值。

位组合如下

| - - | - - - | - - - |

第一部分包含两位 第二部分包含 3 位 第三部分包含 3 位

样本值为

11010001 = 209 十进制

我想要的是创建三个不同的属性,这些属性让我得到上面定义的给定位的三个部分的十进制值。

我怎样才能从这个十进制数中获取位值,然后从各个位中获取十进制值..

最佳答案

只需使用移位和掩码。假设两位值在字节的高位:

int value1 = (value >> 6) & 3;  // 3 = binary 11
int value2 = (value >> 3) & 7;  // 7 = binary 111
int value3 = (value >> 0) & 7;

当然,最后一行不必使用移位运算符 - 移位 0 位没有任何作用。不过,我认为它增加了一致性。

对于您的示例值,value1 = 3、value2 = 2、value3 = 1。

反转:

byte value = (byte) ((value1 << 6) | (value2 << 3) | (value3 << 0));

关于c# - 如何使用位值解析字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4713265/

相关文章:

c# - 如何将有异常的消息转发到 Rebus 错误队列

c# - Silverlight RichtextBox Xaml 属性,无法设置值(异常)

c# - 每个 ASP.NET session 锁定

c# - MSDN WCF 服务示例不起作用

c# - 为什么我的 POST 方法不起作用?

c# - 从 C# 驱动程序建立多个快速连接时,服务器发送了无效的随机数

C# 将表值参数传递给 SqlCommand 不起作用

C# 将对象数组转换为数据表

c# - 在 C# 中以编程方式将 .crt + .key 文件转换为 X509Certificate2

c# - 在 C# 中使用接口(interface)作为泛型类的类型参数,限制为 "class"