クロス言語開発のプロセスでは、アルゴリズムや関数をある言語から別の言語に翻訳する必要がある状況によく遭遇します。このプロセスでは、ブロック CRC32 変換が一般的な要件です。ただし、このブロック CRC32 を Go から JavaScript に変換するのは簡単な作業ではありません。この記事では、PHP エディター Xigua が、開発者がこの問題を解決できるように、このブロック CRC32 を Go から JavaScript に正しく変換する方法を紹介します。
Goにはこの関数があります:
リーリー結果は次のようになります: 0x948b389d
これを JavaScript に翻訳しようとしていますが、何かが足りません:
リーリーしかし、結果は異なります。 (46e32ed6)
最後の XOR がなくても、b91cd129
が得られます。これを修正する方法と、なぜこれが間違っているのかを説明してくれる人はいますか?
2つの違いがあります:
go 実装は reflect
を呼び出しました ( https://www.php.cn/link/f23775b54b9e62e2d15498c3b9418630 を参照):
go の finalxor
は 0
(params.finalxor = 0
)、js では -1
( return (crc ^ (-1)) phpcngt phpcn>> 0;phpcnendc phpcn)
これは、同じハッシュ値を生成する更新された js 実装です。
以上がこのブロック CRC32 を Go から JavaScript に正しく変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。