C# 我可以对字节[]执行位运算吗?
假设我有:C# 我可以对字节[]执行位运算吗?,c#,bitwise-operators,C#,Bitwise Operators,假设我有: byte[] data = new byte[] { 1, 212, 29, 144 }; 我能够计算出按位AND&的唯一方法是首先将字节[]转换为uint: if ((BitConverter.ToUInt32(data,0)) & 0x7) == 1) { //If the last 3 bits are ...111, then do something } 这看起来很难看。有没有更好的方法可以在不必转换为UInt的情况下对字节[]执行逐位操作?谢谢。不,在
byte[] data = new byte[] { 1, 212, 29, 144 };
我能够计算出按位AND&的唯一方法是首先将字节[]转换为uint:
if ((BitConverter.ToUInt32(data,0)) & 0x7) == 1)
{
//If the last 3 bits are ...111, then do something
}
这看起来很难看。有没有更好的方法可以在不必转换为UInt的情况下对字节[]执行逐位操作?谢谢。不,在.Net中没有直接支持字节数组上的位操作 你可以
- 转换为问题中显示的现有类型
- 自己在阵列上实现操作并使用阵列
- 考虑是否适用于您的情况(支持对任意长数字的所有位运算,但在常规
值之外没有直接的方法写入长常量)long
- 考虑是否适用于您的情况(如果您只需要检查/设置特定位,则更好)
byte b1 = 0x11;
byte b2 = 0xF0;
byte b3 = (byte)(b1 & b2);
data[0]&0x7
不起作用?@SuperPeanut data[3]会起作用,因为我想比较本例中的最后3位。然而,我正在寻找一个解决方案,在这个解决方案中,我可以对多字节值执行AND操作。作为另一个例子,我希望能够执行如下操作:if(data&0x8000000){//do something true}不幸的是,程序只能比较相同的东西。要么将数据转换为UInt32
,要么将比较器(0x8000000
)转换为位数组,并对每个项进行比较……当您逻辑地和(&
)一个13字节带数字的数组时,您期望得到什么结果?或者您希望有一种专门用于大小为4的字节数组的内置方式?您希望data&0x8000000
的结果意味着什么?您希望结果类型是什么?这是一个毫无意义的操作,IMO。另一种方法是使用BitArray类您忘记了不安全的解决方案。