【问题标题】:How to work with the bits in a byte如何处理字节中的位
【发布时间】:2013-07-08 09:52:10
【问题描述】:

我有一个包含两个值的字节。这是文档:

权限字节分为两个字段。三个最低有效位携带用户的权限级别(0-5)。五个最 有效位带有覆盖拒绝阈值。如果这些位是 设置为零,系统拒绝阈值用于确定是否 此用户的分数被视为接受或拒绝。如果他们是 不为零,则这些位的值乘以十将是 此用户的阈值分数。

权限字节:

7 6 5 4 3 ......... 2 1 0
Reject Threshold .. Authority

我没有任何在 C# 中使用位的经验。

有人可以帮我转换一个字节并得到上面提到的值吗?

我试过以下代码:

BitArray BA = new BitArray(mybyte); 

但长度返回为 29,而我预计 8,即字节中的每一位。

-- 感谢大家的快速帮助。现在开始工作了!很棒的互联网。

【问题讨论】:

标签: c# byte


【解决方案1】:

代替BitArray,您可以更轻松地使用内置的bitwise ANDright-shift 运算符,如下所示:

byte authorityByte = ...

int authorityLevel = authorityByte & 7;
int rejectThreshold = authorityByte >> 3;

要取回单个字节,您可以使用bitwise ORleft-shift 运算符:

int authorityLevel = ...
int rejectThreshold = ...

Debug.Assert(authorityLevel >= 0 && authorityLevel <= 7);
Debug.Assert(rejectThreshold >= 0 && rejectThreshold <= 31);

byte authorityByte = (byte)((rejectThreshold << 3) | authorityLevel);

【讨论】:

  • 你能告诉我如何将这两个值转换回一个字节吗?
【解决方案2】:

您对BitArray 的使用不正确。这个:

BitArray BA = new BitArray(mybyte);

..将隐式转换为int。发生这种情况时,您将触发此构造函数:

BitArray(int length);

..因此,它以特定长度创建它。

看看 MSDN (http://msdn.microsoft.com/en-us/library/x1xda43a.aspx) 你想要这个:

BitArray BA = new BitArray(new byte[] { myByte });

长度将为 8(如预期的那样)。

【讨论】:

    【解决方案3】:

    要以整数形式获取字节中最高五个位的值,请将字节右移3(即8-5),并使用按位@987654323 将高三位设置为零@操作,像这样:

    byte orig = ...
    int rejThreshold = (orig >> 3) & 0x1F;
    
    • &gt;&gt; 是“右移”运算符。它将第 7..3 位移动到第 4..0 位,删除低三位。
    • 0x1F 是二进制数00011111,其高三位设置为零,低五位设置为一。 AND-ing 用这个数字清零高三位。

    这种技术可以推广到其他位模式和其他整数数据类型。您将所需的位移动到最不重要的位置,并应用一个掩码来“删除”您想要的位数。在某些情况下,不需要移位(例如,当您获得最低有效位组时)。在其他情况下,例如上述情况,不需要屏蔽,因为您会在无符号类型中获得最重要的位组(如果类型是有符号的,则需要 ANDing)。

    【讨论】:

      【解决方案4】:

      您使用了错误的构造函数(可能)。

      您使用的可能是this one,而您需要this one

      var bitArray = new BitArray(new [] { myByte } );
      

      【讨论】:

        猜你喜欢
        • 2012-04-04
        • 2019-06-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多