这个不安全的代码如何工作?

Ale*_*kin 5 c#

我读了"C.Sharp 3.0 in a Nutshell"一书,并且遇到了我感兴趣的下一段代码.

  unsafe void RedFilter(int[,] bitmap)
    {
      int length = bitmap.Length;
      fixed (int* b = bitmap)
      {
        int* p = b;
        for(int i = 0; i < length; i++)
          *p++ &= 0xFF;
      }
    }
Run Code Online (Sandbox Code Playgroud)

谁能解释一下这个"*p ++&= 0xFF"是如何工作的?

Dmi*_*ant 8

该功能可能意味着采用位图图像,并过滤除红色以外的所有颜色.

这假设它是一个32位位图,其中每个像素由一个表示int.您将取消引用当前指向的内存位置p(这是一个int),并使用AND运算0xFF,这实际上只留下像素的红色分量(假设最低字节是红色分量).您还会自动将指针递增到下一个int(带++).那回答了吗?


Tim*_*son 5

它与此相同(IMO原始*p++ &= 0xFF;技巧有点令人讨厌 - 它是一行代码,它做了两件事):

*p = *p & 0xFF;
p++;
Run Code Online (Sandbox Code Playgroud)

一个表达式a = a & 0xFF将除变量的最后8位之外的所有变量a设置为零.