我可以对byte []执行按位运算吗?

时间:2016-06-26 19:43:29

标签: c# bitwise-operators

让我说我有:

byte[] data = new byte[] { 1, 212, 29, 144 };

我唯一可以想出做一个按位AND&首先将byte []转换为uint:

if ((BitConverter.ToUInt32(data,0)) & 0x7) == 1)
{
    //If the last 3 bits are ...111, then do something
}

这看起来很难看。有没有更好的方法在byte []上执行按位运算而不必转换为UInt?感谢。

2 个答案:

答案 0 :(得分:1)

不,.Net中没有直接支持字节数组上的位操作。

你可以

  • 转换为您在问题中显示的现有类型
  • 自己在阵列上实现操作并使用数组
  • 考虑BigInteger是否适用于您的情况(支持对任意长数字进行所有按位运算,但没有直接的方法可以在常规long值之外编写长constan)
  • 考虑BitArray是否适用于您的情况(如果您只需要检查/设置特定位,则更好)。

答案 1 :(得分:-1)

我找到了这个解决方案:

byte b1 = 0x11;
byte b2 = 0xF0;
byte b3 = (byte)(b1 & b2);