2016-10-16 44 views
-1

私は18005の16進数のフレームのデータを持っており、すべてのフレームのうちcrc-16(0xffff)を同時に計算して追加したいと思います。CRC-16(0xFFFF)の計算

+1

ようこそスタックオーバーフロー!完成したコードを尋ねる質問は、StackOverflowのトピックではありません。あなたはあなたが使用したい言語を指定していないので、誰かがこの質問に有益に答えることはできません。 – Aurora0001

+0

私はC#言語を使用しています –

答えて

1

あなたのCRCは適切に指定されていません。あなたは16ビットCRCを使用するいくつかのプロトコルとの互換性をしようとしていますか?その場合、そのCRCのパラメータを調べる必要があります。 here a list of 28 different 16-bit CRC definitionsが見つかります。あなたが必要とするものはそれらの1つかもしれません、またはそれはまだ別のパラメータのセットかもしれません。

"(0xffff)"があなたの名前で意味することはまったく明らかではありません。初期値は?最後の排他的または?空の文字列のCRC?他に何か?

すべてのフレームのCRCを「同時に」計算することが意味することは明確ではありません。なぜ同時に言ったのですか?

CRCを追加するときに、追加するビットまたはバイトオーダーも知る必要があります。 2バイトのCRCは、リトルまたはビッグエンディアンの順序で付加できます。

更新:

コメント例の大腸がんから、所望のCRC-16はCRC-16/CCITT-FALSE from the RevEng catalogあります。 crcanyを使用して、このCRCを計算するCコードを生成できます。速度と複雑さのレベルを変えて、ビット単位、バイト単位、ワード単位のコードを生成します。生成されたビット単位のルーチンは次のとおりです。

#include <stdint.h> 

unsigned crc16ccitt_false_bit(unsigned crc, void const *data, size_t len) { 
    if (data == NULL) 
     return 0xffff; 
    while (len--) { 
     crc ^= (unsigned)(*(unsigned char const *)data++) << 8; 
     for (unsigned k = 0; k < 8; k++) 
      crc = crc & 0x8000 ? (crc << 1)^0x1021 : crc << 1; 
    } 
    crc &= 0xffff; 
    return crc; 
} 

bufNULLある場合は、初期CRC値が返されます。)

あなたはあなたの例から検査によって伝えることができCRCがほとんど、またはに追加された場合にストリームビッグエンディアン注文。

+0

先生、18005の16進数のフレームがあるデータがあります。一つのサンプルフレームは次のように与えられる: –

+0

「AA01004AFF025773429200000000014048A76F64BE211C4648A76F64C0101C5648A76F64C08B137444154CBDBFA2073444154CBDC0570E2C44154CBDC0AE8C5F42700000B48B4296」 –

+0

上記は私のサンプルフレームです。私はこのような18004以上のフレームを持っており、私は計算し、同時にすべてのフレーム(フレームの終わりに)にcrc-16ビットを追加する必要があります。私の各フレームサイズは72バイトで、私は0xFFFFの初期値を持つcrcの2バイトを追加する必要がありますか? –

関連する問題