この式は、Leptonica (画像処理ライブラリ) の組み込み関数 "l_setDataByte" から取得されます。
リンクは次のとおりです: http://tpgit.github.io/Leptonica/arrayaccess_8c_source.html (Line-260 here)
*(l_uint8 *)((l_uintptr_t)((l_uint8 *)line + n) ^ 3) = val;
この式は、Leptonica (画像処理ライブラリ) の組み込み関数 "l_setDataByte" から取得されます。
リンクは次のとおりです: http://tpgit.github.io/Leptonica/arrayaccess_8c_source.html (Line-260 here)
*(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 (リトル エンディアン) の 2 つの方法で連続したバイトに入れることができます。XOR はビッグ エンディアン アドレッシング (274 行を参照) からリトルエンディアン (276 行) に切り替わります。これはプロセッサに依存し、ソースは何らかの方法でコンパイルされます。