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

Can I perform bitwise operations on byte[]?

假设我有:

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
}

这看起来很难看。有没有更好的方法可以在不转换为 UInt 的情况下对 byte[] 执行按位运算?谢谢

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

你可以

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

我找到了这个解决方案:

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