我读了“坚果 shell 中的C.Sharp 3.0”这本书,并遇到了下一段我感兴趣的代码。

  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;
      }
    }

谁能解释我这个“* p++&= 0xFF”如何工作?

最佳答案

该功能大概是要拍摄位图图像,并滤除除红色以外的所有颜色。

假定它是一个32位位图,其中每个像素都由int表示。
您要取消引用p(这是一个int)当前指向的内存位置,并将其与0xFF进行“与”运算,这实际上只留下了像素的红色部分(假设最低字节是红色部分)。您还将自动将指针增加到下一个int(带有++)。这有答案吗?

09-10 05:30
查看更多