我可以对 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);
假设我有:
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);