ホームページ  >  記事  >  バックエンド開発  >  このブロック CRC32 を Go から JavaScript に正しく変換するにはどうすればよいですか?

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

PHPz
PHPz転載
2024-02-13 22:00:11875ブラウズ

如何正确地将这个块 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 までご連絡ください。