問題タブ [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# - SerialPort Write()は、送信バッファーよりも多くのバイトを送信します
非常に奇妙な問題があります。105バイト[]のバッファを送信していて、反対側で常に116バイトを受信しています。
元のデータの最後の2バイトはCRC16です
私が送信に使用しているコードは、永遠にループしています。
私が常に反対側で取得しているのは、次の116バイトです(メッセージが元のCRCバイトで終了するのはどのくらい奇妙ですか??)
この問題を解決するために助けをいただければ幸いです。
ありがとうございました
objective-c - NSData から CRC-16 へ?
NSData から CRC-16 を計算しようとしています。123456789 からの「BB3D」を期待していますが、そのようなものはありません。
これは私が持っているコードです:
54849 と d641 が表示されますが、これは私が期待したものではありません。
c# - 多項式 x16 + x12 + x5 + 1 で CRC 16 を計算する方法
私はいくつかのシステムとインターフェースしようとしていますが、その仕様では、シリアル通信用に CRC 16 を計算する必要があります。これはドキュメントからの抜粋です
「標準多項式 X16 +X12 +X5 +1 を利用したメッセージの 16 ビット CCITT CRC。シード値は常に 0 (ゼロ)」
まず第一に、それを行う方法の C# コードのサンプルが 2 ~ 3 つしか見つかりませんでしたが、どれも正しい値を提供していないようです。これを試しましたhttp://www.sanity-free.com/133/crc_16_ccitt_in_csharp.htmlを試しましたが、初期値に何を設定すればよいかわかりません。ゼロを試しましたが、まだ機能しません。
私がテストしているデータは次のとおりです。
私が得るCRC値は
ただし、彼らのシステムはそうあるべきだと言っています
私の理解では、多項式 x16 + x12 + x5 + 1 = 0x11021 ですが、コードでこれを使用しても、間違った答えが得られます。私は何を間違っていますか?
c# - CRC-CCITT (0xFFFF) がないのは何ですか?
16 進文字列データを入力したときのオンライン CRC 計算に基づく=
503002080000024400003886030400000000010100
結果CRC-CCITT(0xFFFF) = を取得します
0x354E (期待される結果)
.
以下のコードを使用しますが、CalcCRC16()の結果は0xACEEです。以下のスクリプトの欠如は何ですか?
c# - CRC-16 および CRC-32 チェック
CRC-16 の値を検証しようとして助けが必要です (CRC-32 の値についても助けが必要です)。私は座ってCRCがどのように機能するかを理解しようとしましたが、空白を描いています.
BD001325E032091B94C412AC
私の最初の問題は、メッセージ " " をCRC16 = 12ACに計算するためにオンライン計算機を使用しようとしたときです。ドキュメントには、最後の 2 オクテットが CRC16 値であると記載されているためBD001325E032091B94C4
、サイトhttp://www.lammertbies.nl/comm/info/crc-calculation.htmlに「 」と入力すると、結果として 12AC ではなく 5A90 が返されます。 .
これらの値が異なる理由と、CRC16 と CRC32 の値を計算する方法のコードを見つけることができる場所を知っている人はいますか?
その他のメッセージは次のとおりです。
- 編集 -
私はより多くの情報を含めました。私が参照していたドキュメントは、TIA-102.BAAA-A (TIA 標準から) です。ドキュメントには次のように記載されています (可能な限り著作権侵害を回避しようとしています)。
パケット内の最後のブロックは、ユーザー情報の数オクテットおよび/またはパッド オクテットで構成され、その後に 4 オクテットの CRC パリティ チェックが続きます。これは、パケット CRC と呼ばれます。
パケット CRC は、中間ブロックに含まれるすべてのデータ オクテットと最終ブロックのユーザー情報のオクテットにわたってコード化された 4 オクテットの巡回冗長検査です。具体的な計算は以下の通りです。
k を、パケットの CRC を計算するユーザー情報とパッド ビットの総数とします。k メッセージ ビットを次数 k–1 の多項式 M(x) の係数と見なし、0 番目のメッセージ オクテットの MSB を x^k–1 に関連付け、最後のメッセージ オクテットの LSB を x^0 に関連付けます。生成多項式 GM(x) と反転多項式 IM(x) を定義します。
GM(x) = x^32 + x^26 + x^23 + x^22 + x^16 + x^12 + x^11 + x^10 + x^8 + x^7 + x^5 + x ^4 + x^2 + x + 1
IM(x) = x^31 + x^30 + x^29 + ... + x^2 + x +1
パケットの CRC 多項式 FM(x) は、次の式から計算されます。
FM(x) = ( x^32 M(x) mod GM(x) ) + IM(x) modulo 2、つまり GF(2)
FM(x) の係数は、x^31 に対応する CRC の 0 番目のオクテットの MSB と x^0 に対応する CRC の 3 番目のオクテットの LSB と共に CRC フィールドに配置されます。
上記の引用では、^
引用されたときにフォーマットが同じままではなかったため、力を示しました。何がどうなるかわかりませんが、これは役に立ちますか?
serial-communication - CRC16とデータ通信
こんにちは、ソフトウェア インターフェイスを書きたいデバイスの CRC を計算しようとしています。簡単にするために、X をデバイス、Y をハードウェア コントローラーとします。私は正しい方向へのナッジを探しています。いくつかの点で少し混乱しているだけで、正しい軌道に乗っていると確信しています。
デバイスがアイドル状態のとき、次のデータ文字列を 2 秒ごとに送信します。これは、16 進数でカウントアップしているように見えます: 間の 2 バイト| |
は、私が想定する CRC です。(XX) は可変バイトです。
reveng
withreveng -w 16 -s
と上記のデータセットを使用すると、次のようになります。
コントローラーから a コマンドをインターセプトすると、次のようになります。
(22) は修飾子|0B B8|
で、CRC です。22 は E4 からどのように派生したのですか? それは別のCRCですか?
同じコマンドを数回送信したところ、次のものが傍受されました。
reveng
withreveng -w 16 -s
と上記のデータセットを使用すると、次のようになります。
多項式は同じですが、初期化とチェックは異なります。長い投稿で申し訳ありませんが、私の質問の要約は次のとおりです。
1) たとえば、デバイスが同じ多項式を使用するが、異なる初期化とコントローラーへのチェックを使用するのは一般的ですか?
2) デバイスからの文字列をカウントする定数は、チェックサムの計算に使用される変数バイトをオフセットするために使用されますか? もしそうなら、このメカニズムは何と呼ばれ、カウントとバイトの関係を導き出すためにどのような方法を使用できますか?
3) 私は正しい道を進んでいますか、それとも途中で道に迷いましたか?
これを読んでくれてありがとう、そして正しい方向へのキックを本当に感謝します.
c++ - CRC-CCITT の実装
次の関数を使用して CRC 合計を生成していますが、オンラインの CRC-CCITT 計算機と比較すると、同じチェックサムが返されないようです。
この関数は、初期 fcs が 0xFFFF の 0x8408 多項式で XMODEM CRC 生成を具体的に使用します。
私は何か間違ったことをしていますか?0xFF または 0x00 を送信すると、 http://depa.usst.edu.cn/chenjq/www2/SDesign/JavaScript/CRCcalculation.htmで行うのと同じチェックサムが得られません。
excel - VBA Excel での変換の問題 - HFFF が長く -1 を与える理由とその解決方法
Excel で VB を使用しており、CRC16 ビット計算用のマクロを作成しています。ルックアップ テーブルから 8000 を超えて FFFF までの値を取得すると、負の数値が返されます。次に、この範囲未満の数値は正になり、この範囲 (8000-FFFF) の数値は負の結果になり、変換する必要があることを知りました。私はこれらのようないくつかの機能に出くわしましたが、それらは私の目的を解決しません
正しい結果を得るために、単純な関数を使用して変換を行うことは可能ですか?
HFFFF は long 変数に -1 を与えますが、65535 が必要です。
http://support.microsoft.com/kb/161304にある関数を使用しましたが、HFFFF のような 16 進値を渡すと正しい結果が得られません。