このブロック CRC32 を Go から JavaScript に正しく変換するにはどうすればよいですか?

PHPz
リリース: 2024-02-13 22:00:11
転載
878 人が閲覧しました

如何正确地将这个块 CRC32 从 Go 翻译为 JavaScript?

クロス言語開発のプロセスでは、アルゴリズムや関数をある言語から別の言語に翻訳する必要がある状況によく遭遇します。このプロセスでは、ブロック CRC32 変換が一般的な要件です。ただし、このブロック CRC32 を Go から JavaScript に変換するのは簡単な作業ではありません。この記事では、PHP エディター Xigua が、開発者がこの問題を解決できるように、このブロック CRC32 を Go から JavaScript に正しく変換する方法を紹介します。

質問内容

Goにはこの関数があります:

リーリー

結果は次のようになります: 0x948b389d

これを JavaScript に翻訳しようとしていますが、何かが足りません:

リーリー

しかし、結果は異なります。 (46e32ed6)

最後の XOR がなくても、b91cd129

が得られます。

これを修正する方法と、なぜこれが間違っているのかを説明してくれる人はいますか?

解決策

2つの違いがあります:

  1. go 実装は reflect を呼び出しました ( https://www.php.cn/link/f23775b54b9e62e2d15498c3b9418630 を参照):

    リーリー
  2. go の finalxor0 (params.finalxor = 0)、js では -1 ( return (crc ^ (-1)) phpcngt phpcn>> 0;phpcnendc phpcn)

これは、同じハッシュ値を生成する更新された js 実装です。

リーリー

以上がこのブロック CRC32 を Go から JavaScript に正しく変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:stackoverflow.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート