此表达式取自 Leptonica(图像处理库)中的内置函数“l_setDataByte”。
这是链接:http ://tpgit.github.io/Leptonica/arrayaccess_8c_source.html (此处为第 260 行)
*(l_uint8 *)((l_uintptr_t)((l_uint8 *)line + n) ^ 3) = val;
此表达式取自 Leptonica(图像处理库)中的内置函数“l_setDataByte”。
这是链接:http ://tpgit.github.io/Leptonica/arrayaccess_8c_source.html (此处为第 260 行)
*(l_uint8 *)((l_uintptr_t)((l_uint8 *)line + n) ^ 3) = val;
我猜:
(l_uint8 *)line
(l_uint8 *)line + n
--> y(y 是指针)(l_uintptr_t)y ^ 3
--> z(z 是指针)val
那里:*(l_uint8 *)z = val
编辑: ^3 是为了解决字节的排列(即小端与大端)。数字 0x12345678 可以通过两种方式放入连续字节中:0x12、0x34、0x56、0x78(这是大端)或 0x78、0x56、0x34、0x12(小端)。XOR 将从大端寻址(见第 274 行)切换到小端寻址(第 276 行)。这取决于处理器,源代码以一种或另一种方式编译。