掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
CRCを計算しても一致しません・・・ (ID:57800)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
C初心者です(^^ゞ 現在、ある端末とシリアル通信を行うソフトを作成中です。 端末がデータブロックの後ろにCRCを2バイトくっつけて 送ってくるのですが、こちらで計算した結果と送ってきた結果が 異なるため、困っています。。。 サンプルをのせますのでわかる方がいらっしゃいましたら 教えてください [端末から送られてくるデータ] (前3byteはヘッダだとおもいます 後ろの2バイトがCRCだと思います) 01 00 00 11 02 00 10 82 C4 82 B7 82 C6 2E 70 6E 67 00 03 FA 9E 上の例だと、CRCはFA9Eになるはずですが、自分で計算したところ、 0x4871 がCRCとして出力されてきてしまいます。。。 データは <<ヘッダ3byteは削除 11 02 00 10 82 C4 82 B7 82 C6 2E 70 6E 67 00 03 00 00 <<CRCの部分は00で埋める 計算には以下のソースを使用しています。 CRC-16・CCITT-16両方やってみましたが一致しませんでした。。。 /*********************************************************** crc16.c -- CRC ***********************************************************/ #include <limits.h> #define CRCPOLY1 0x1021 /* x^{16}+x^{12}+x^5+1 */ #define CRCPOLY2 0x8408 /* x16+x15+x2+x1+1 左右逆転 */ unsigned int crc1(int n, unsigned char *c) { unsigned int i, j, r; r = 0xFFFF; for (i = 0; i < n; i++) { r ^= (unsigned int)c[i] << (16 - CHAR_BIT); for (j = 0; j < CHAR_BIT; j++) if (r & 0x8000) r = (r << 1) ^ CRCPOLY1; else r <<= 1; } return ~r & 0xFFFF; } unsigned int crc2(int n, unsigned char *c) { unsigned int i, j, r; r = 0xFFFF; for (i = 0; i < n; i++) { r ^= c[i]; for (j = 0; j < CHAR_BIT; j++) if (r & 1) r = (r >> 1) ^ CRCPOLY2; else r >>= 1; } return r ^ 0xFFFF; } ちなみに上記ソースは ftp://ftp.matsusaka-u.ac.jp/pub/algorithms/ から頂きました。 よろしくお願いします。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.