0
該表達式取自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_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行)。這是依賴於處理器的,源代碼是以某種方式編譯的。
如果我們對地址的最後兩位進行異或,會發生什麼? 我知道...... 11變成...... 00,...... 10變成...... 01 ...... 01變成...... 10和...... 00變成...... 11 但是,爲什麼他這樣做? – saint1729