此表达式取自Leptonica(图像处理库)中的内置函数“l_setDataByte”。
以下是链接:http://tpgit.github.io/Leptonica/arrayaccess_8c_source.html(此处为第260行)
*(l_uint8 *)((l_uintptr_t)((l_uint8 *)line + n) ^ 3) = val;
答案 0 :(得分:0)
我的猜测:
(l_uint8 *)line
(l_uint8 *)line + n
- > y(y是指针)(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行)。这取决于处理器,源是以这种或那种方式编译的。