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# - 在处理调用者之前尚未完成的 await 调用会发生什么情况?

c# - 内部安全检查,如何做到100%的代码覆盖率?

c# - 如何在 Windows Phone 8.1 中获取两个位置之间的距离

c# - 在 C# 中将\u0040 转换为 @

c# - 我这个翻译正确吗?

c# - 字符串和 UTF16

c# - 我可以使用 Assembly.TryGetRawMetadata 和 System.Reflection.Metadata 访问方法主体(例如 IL 字节数组)吗?

c# - .NET core - 将连接字符串读入 Entity Framework Core

c# - 具有一定堆栈大小的进程?

c# - 分配和方法调用顺序