問題タブ [crc16]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - CRC16(Modbus)値算出機能
C#.net、WPF アプリケーションを使用して、デバイス (MODBUS プロトコル) に接続するつもりで、CRC (CRC16) を計算する必要があります。私が使用する関数は、通常のcrc16を計算し、値は正しいですが、CRC16(modbus)の値が必要です。
整理するのを手伝ってください。
security - CRC16 衝突 (異なるサイズのブロックの 2 つの CRC 値)
問題
行ごとに 1 つの文字列を含むテキスト ファイルがあります (改行 \r\n)。このファイルは、2 つの異なる方法で CRC16 を使用して保護されています。
- 4096 バイトのブロックの CRC16
- 32768 バイトのブロックの CRC16
ここで、これらの 4096 バイト ブロックのいずれかを変更する必要があるため、(ブロック)
- 特定の文字列を含む
- テキストファイルのサイズを変更しません
- 元のブロックと同じ CRC 値を持つ (この 4k ブロックを含む 32k ブロックも同じ)
その制限を除いて、ファイル自体がそのフォーマットを壊さない限り、ブロックを満たすために必要な変更をブロックに加えることができます。最後のブロックではなく、完全に満たされた 4k ブロックのいずれかを使用するのが最善だと思います。
質問
その問題を解決するにはどうすればよいですか?私が思いつく最初のことは、ある種のブルートフォースですが、両方のCRC値が同じままになる変更を見つけるのに非常に時間がかかりませんか? おそらくそれを解決する数学的な方法はありますか?
数秒または最大で実行する必要があります。数分。
c# - C# での DECT の CRC 16
Cで同様の質問と回答がありますが、C#で同じことを達成するのに少し苦労しています。
Generator Polynomial : 2 進数にx^16 + x^10 + x^8 + x^7 + x^3 + 1
相当します。10000010110001001
48 ビットのデータがあり、16 ビットの CRC を生成する必要がありました。コードは次のとおりです。
しかし、上記のコードでは間違った出力が得られます。より良い方法があれば提案してください。
Edit:
データ(a0~a47):100011100011000001000001000100001000000000001000
多項式:10000010110001001
得られた出力:0011 0100 1111 0111
期待される出力: 1100 1101 0100 1111
御時間ありがとうございます。!
java - Javaはcrcチェックを実行します(bytearrayをbytearrayで除算)
バイト配列で整数を生成し、CRC
それも 4 バイト配列に変換しました。生成多項式 = を使用する CRC16 にこのクラスを使用しました。これは
、バイト配列とオーバーをサーバーに送信0x1021;
することを意味します。サーバー側では、バイト配列が適切に送信されたかどうかを確認したいと思います。私が理解しているように、crc-array と連結されたデータ配列を生成多項式で除算するだけです。私はそれを正しく理解しましたか?そして、Javaで生成多項式による除算を実行する方法は?1 + x + x^5 + x^12 + x^16
CRC
UDP
data+crc
データに対してcrcコードを再度生成し、結果のcrcコードが同じかどうかを比較するだけのソリューションを見てきましたが、これはおそらくcrcコードが作成されたものではありません。
c++ - Modbus RTU CRC 16 の計算
Modbus RTUプロトコルでシリアル経由でデータを読み書きするソフトウェアを実装しています。そのためには、バイト文字列の末尾にある 2 つの CRC バイトを計算する必要がありますが、これを行うことができません。
ウェブ全体を検索すると、CRC を正しく計算しているように見える 2 つの関数が見つかりました。
と
問題は、この関数が整数値を返すときに、CRC 番号として 2 つの 16 バイトを取得することになっていることです。たとえば、「01」(1 バイト) の場合、「21695」を取得するときに「7E80」を取得するはずでしたが、これからその 16 進データへの何らかの変換を行うことができません。
したがって、私の質問は次のとおりです。整数の結果から必要な2倍の16進数の結果にするにはどうすればよいですか? いくつかのオプションを試しましたが、成功しませんでした。
注: 私は Qt を使用しているので、QByteArray または別の Qt に適したコードを実装するソリューションを見つけることができれば幸いです。いずれにせよ、Qt、C、または C++ を使用しないソリューションは役に立ちません:P
php - CRC-CCITT から CRC16 Modbus への実装
PHP を使用して modbus CRC16 コードを生成する際に多くの問題が発生しています。インターネットでさまざまなコードを見つけましたが、それらを試してみましたが、何らかの理由で正しい結果が得られませんでした。CRC16-CCITT を生成するための PHP コードを見つけました。ルックアップ テーブルを modbus CRC 対応テーブルに変更しましたが、結果はまだ正しいものではありません。コードは以下です。CRC16-CCITT コードを CRC16-MODBUS コードに変換するには、さらに何をする必要がありますか?
matlab - Matlab の 16 ビット CRC-CCITT
calcCRC()
以下に示す C 関数が与えられた場合、同等の Matlab 関数は何ですか?
C の 16 ビット CRC-CCITT:
以下は、私が思いついたMatlabコードで、同等のように見えますが、同じ結果を出力しません:
(不正解) Matlab の 16 ビット CRC-CCITT:
以下は、整数配列として表されたバイト配列のサンプルです。
予想される出力は、またはbase10(44 219)
である2 バイトです。base2(00101100 11011011)
base10(11483)
私のMatlab関数は、base10(85)
どちらが であるかを示しbase2(00000000 01010101)
ます。
出力が期待どおりにならない原因についてのアイデアはありますか?
java - Javaで16ビットCRCを計算し、バイト配列の最後に追加します
次のバッファがあります
これらの 6 バイトの 16 ビット CRC を計算し、末尾に追加する必要があります。
私はC++を使用してそれを行い、以下のようにJavaでそのコードを変更しようとしましたが、うまくいきませんでした.
ラインで
表示されるエラーは、「int から boolean に変換できません」です。
そしてラインで
表示されるエラーは「int から char に変換できません」です。
実際、c のコードは unsigned char を使用していましたが、それらを char に変換しました。そして、このJava実装でunsinged shortをintに変換しました。
この crc 計算方法を改善するにはどうすればよいか提案してください。または、16 進バイトから crc を計算する他の方法はありますか。他の方法を検索しましたが、pingBuff[] の 16 進バイトでは機能しませんでした。