这个表达式意味着什么?

时间:2013-08-01 15:35:18

标签: image-processing bitwise-operators xor typecast-operator leptonica

此表达式取自Leptonica(图像处理库)中的内置函数“l_setDataByte”。

以下是链接:http://tpgit.github.io/Leptonica/arrayaccess_8c_source.html(此处为第260行)

*(l_uint8 *)((l_uintptr_t)((l_uint8 *)line + n) ^ 3) = val;

1 个答案:

答案 0 :(得分:0)

我的猜测:

  • line是指向无符号8位(字节)(l_uint8 *)line
  • 的指针
  • 一个操纵行中的第n个字节:(l_uint8 *)line + n - > y(y是指针)
  • 然而,在转换为非明确的整数指针后,还会将地址的最后2位进行异或运算:(l_uintptr_t)y ^ 3 - > z(z是指针)
  • 最后一个转换为无符号字节点并在其中写入值val*(l_uint8 *)z = val

修改: ^ 3用于解决字节的排列(即,小vs大端)。数字0x12345678可以两种方式放入连续字节:0x12,0x34,0x56,0x78(这是大端)或0x78,0x56,0x34,0x12(小端)。 XOR将从大端寻址(见第274行)切换到小端(第276行)。这取决于处理器,源是以这种或那种方式编译的。