Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我可以对字节[]执行位运算吗?_C#_Bitwise Operators - Fatal编程技术网

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类您忘记了不安全的解决方案。