Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image processing 下面这个表达是什么意思?_Image Processing_Bitwise Operators_Xor_Typecast Operator_Leptonica - Fatal编程技术网

Image processing 下面这个表达是什么意思?

Image processing 下面这个表达是什么意思?,image-processing,bitwise-operators,xor,typecast-operator,leptonica,Image Processing,Bitwise Operators,Xor,Typecast Operator,Leptonica,此表达式取自Leptonica(图像处理库)中的内置函数“l_setDataByte” 这是链接:(这里是第260行) 我猜: 行是指向无符号8位(字节)(l_uint8*)行的指针 操作行中的第n个字节:(l_uint8*)行+n-->y(y是指针) 但是,在强制转换为非单整数指针后,还可以对地址的最后2位进行异或运算:(l_uintptpr_t)y^3-->z(z是指针) 最后,返回到一个无符号字节点,并将值val写入其中:*(l_uint8*)z=val 编辑: ^3用于处理字节的排列

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

这是链接:(这里是第260行)

我猜:

  • 行是指向无符号8位(字节)
    (l_uint8*)行的指针
  • 操作行中的第n个字节:
    (l_uint8*)行+n
    -->y(y是指针)
  • 但是,在强制转换为非单整数指针后,还可以对地址的最后2位进行异或运算:
    (l_uintptpr_t)y^3
    -->z(z是指针)
  • 最后,返回到一个无符号字节点,并将值
    val
    写入其中:
    *(l_uint8*)z=val
编辑
^3用于处理字节的排列(即小端与大端)。数字0x12345678可以两种方式放入连续字节:0x12、0x34、0x56、0x78(这是大端数)或0x78、0x56、0x34、0x12(小端数)。异或将从大端寻址(见第274行)切换到小端寻址(第276行)。这取决于处理器,并且源代码以某种方式编译。

如果我们对地址的最后两位进行异或运算,会发生什么情况?我知道…11变成…00,…10变成…01,…01变成…10,…00变成…11但是,他为什么这么做?
*(l_uint8 *)((l_uintptr_t)((l_uint8 *)line + n) ^ 3) = val;