生成多項式1種類に付き、8パターンのCRC16値を同時に計算します。
このフリーソフトは、2008年07月22日に Vector に登録しました。
詳しい事は[CRC16の計算ソフト]を読んで下さい。(戻る)
動作環境
- ソフト名:CRC16の計算ソフト
- 動作OS:Vista,XP,WinMe,Win98,Win95,WinNT
- 機種:IBM-PC
- 種類:フリーソフト
- 作者:金魚ちゃん
※ダウンロードは、ソフト名のリンクをクリックして下さい。(Vectorにジャンプ)
技術資料
関連カテゴリ
その他
現在ブログ記事では、ビット送りが左送りだけ公開しています。
時間が空きましたら、右送りの方法も紹介します。
CRCの計算には、次の組み合わせがあります。
- 初期値(0x0000、0xFFFF)
- 出力XOR(0x0000、0xFFFF)
- 入力ビット逆転(あり、なし)
- 出力ビット逆転(あり、なし)
- ビット送り(左送り、右送り)
Vector に登録している[CRC16の計算ソフト]は説明書にも書きましたが、
初期値、出力XOR、ビット送りの組み合わせの8種類を同時に計算します。
特別な最適化は行っていないため、データ量が大きいと計算に時間が掛かります。
これは単純に8回も計算しているからです。
本当は出力XORの 0x0000、0xFFFF を表示の時に処理すれば4回で済みます。
しかし、内部処理を簡略化するために8回の計算を行っています。
今後のバージョン・アップ時には、半分の4回にする予定です。
また、オプションで入力ビット逆転、出力ビット逆転も選択できるようにする予定です。
あと指定した生成多項式のC/C++ソースをクリップボードに出力する機能も付ける予定です。
この辺の機能は[CRC8テーブルの自動作成]を参考にしてクリップボードに出力すれば出来ます。
補足
Vector に登録した[CRC16の計算ソフト]が、2010年07月07日までに通算 6,027 回もダウンロードされました。
Vector に登録した[CRC16の計算ソフト]が、2014年04月12日までに通算 20,537 回もダウンロードされました。
過去に2つの○○株式会社の方が利用したいというメールが届きました。
皆様、この場を借りてありがとうございます。
そこで過去に使った事がある方は、コメントで感想などをお願いします。
また、付けて欲しい機能がありましたら要望もコメントでお願いします。
現在制作中の自作ゲームのセーブデータに
付加した CRC16 (CRC-16-CCITT) が
正しく計算できているかの検証用に
使用させていただきました。ありがとうございます。
その過程で 1 つ不具合を見つけましたので
連絡させていただきます。
バイナリーファイルでの CRC16 算出において、
バイナリーファイルを読み込んだ直後は
CRC16 の計算が正しくなされているのですが、
一度「CRC16の計算」ボタンをクリックしまうと
テキストボックスの中に表示されている
「バイナリファイルです。」という文字 (シフトJIS) を対象に
CRC16 を算出してしまうようです。
> 現在制作中の自作ゲームのセーブデータに
> 付加した CRC16 (CRC-16-CCITT) が
> 正しく計算できているかの検証用に
> 使用させていただきました。ありがとうございます。
ありがとうございます。
> その過程で 1 つ不具合を見つけましたので
> 連絡させていただきます。
これは不具合ではないと思います。
> バイナリーファイルでの CRC16 算出において、
> バイナリーファイルを読み込んだ直後は
> CRC16 の計算が正しくなされているのですが、
当然です。
> 一度「CRC16の計算」ボタンをクリックしまうと
> テキストボックスの中に表示されている
> 「バイナリファイルです。」という文字 (シフトJIS) を対象に
> CRC16 を算出してしまうようです。
そうですね。そいう仕組みです。
うーん。不具合と見ますか。
ボタンを押せないように改良した方がいいのでしょうか?
どうなんだろうな。
1. バイナリーファイルを読み込む
2. 生成多項式を選択
3. CRC16 の計算をクリック
の手順で使っていたため、
CRC が合わずに填りました。
最初から、画面の順に 2 => 1 => 3 でやっていれば
大丈夫だった訳ですが (それに気づくのに時間がかかった)、
大抵のアプリは「ファイルを読み込む」のが
真っ先に行うことが多いので、2 => 1 => 3 では
使い勝手的に不自然のような気がするのです。
説明書に注意書きがあるだけでも助かるかな、と感じました。
> 最初に使ったとき、
> 1. バイナリーファイルを読み込む
> 2. 生成多項式を選択
> 3. CRC16 の計算をクリック
そうですね。
これが普通の順番ですよね。
> ・ファイルから入力
> ファイルをドラッグ&ドロップでウインドウ上に落とすと自動的に読み込んで
> CRC16値を計算してくれます。(この場合はボタンを押す必要はありません)
↑
でも説明書に書いてある部分。
この文面からすると次のようになると思いますよ。
②生成多項式の選択
①バイナリーファイルを読み込む
↑
そして「CRC16値の計算」ボタンは押さずに良いという事ね。
> 説明書に注意書きがあるだけでも助かるかな、と感じました。
次回のバージョン・アップ時に注意書きを書きます。
ひょっとして最初は説明書を読まなかったのかな?
> 使い勝手的に不自然のような気がするのです。
ファイルをドラッグ&ドロップしたら自動的に計算される設計で、
こちらの方が便利だと思って「CRC16値の計算」ボタンを押さない仕様にしました。
次回のバージョン・アップ時に「CRC16値の計算」ボタンの表記を変える予定です。
私も昔(MS-DOS時代)は良く作りました。
> ベジタレリジョン (Vegetareligion) は、猛獣化した植物達を相手に、
> 戦車に乗り込んだ人間達が戦いを挑む戦術級のウォー・シミュレーションゲームです。
シミュレーション・ゲームですか。
私は「フルーツ王国」と呼ばれるシナリオのRPGゲームを考えましたよ。
このゲームの主人公は「オレンジ」で野菜王国のベジタリアンが魔物で戦いを挑む。
魔王ベジタリアンがフルーツ王国に高額な税金を取るところから始まります。
主人公は貧乏家で高額な税金を取る魔王ベジタリアンを打ち倒しに行くわけです。
そして、中盤あたりでベジタリアン達は突然変異で凶暴化したことが分かり、
その突然変異と思われてたのは、実は「人間」と呼ばれる神様が遺伝子実験で
生み出したことが判明します。
その後、後編では魔王ベジタリアンよりも人間と呼ばれる神様に戦いを挑むが、
勝てないので噂で聞いた強い部族に訪ね、人間と呼ばれる神様にも良い神様が
居ることを主人公は知ります。
そして、良い人間の神様に遺伝子強化してもらった主人公はパワーアップして
ベジタリアン達を作り出した遺伝子実験を楽しんでる人間と呼ばれる神様に
戦いを挑み、見事打ち倒すことで魔王ベジタリアンを遺伝子治療で
正常化させて「お金を使う世界」から「お金を使わない世界」に切り替わり
エンディングです。
こんな感じのシナリオですね。
作成中の「ベジタレリジョン」は、どうなるのでしょうね。
完成したら教えてくれませんか。
よろしくお願いします。
CRCタイプ→CRC16
生成多項式→そのまま?
テキスト欄→010300000100
010300000100←のCRCが知りたいだけです
まず最初に「CRCタイプ」を切り替えると自動的に「生成多項式」の16進数も変動します。
そして「生成多項式」にCRC16の生成多項式を16進で入力してテキスト入力に移動します。
このときに「生成多項式」の下のピンク色の内容が自動的に変動します。
あとはテキストボックスに「010300000100」を入力して「CRC16の計算」ボタンを押します。
これで計算は終了して「左送り」と「右送り」で計算結果が表示されます。(ピンク色)
重要なのはCRC16には、
初期値が0x0000、0xFFFFの2通り。
出力XORを反転しない(0x0000)、反転する(0xFFFF)の2通り。
組み合わせると4タイプあり、どの組み合わせで知りたいのでしょうかね?
同時に4タイプを計算しますので「左送り」と「右送り」で8種類の計算をします。
このようにCRC16には、種類があるので注意して下さい。
以上。
こちらのソフトを使わせてもらおうと考えていたのですが,一つ疑問点があったので,聞かせてもらいます.
テキスト欄に,16進数を直接入力しても,正しいCRCを出してくれるのでしょうか?
例) FAF320FF04050607
ご回答,よろしくお願いします.
> テキスト欄に,16進数を直接入力しても,正しいCRCを出してくれるのでしょうか?
> 例) FAF320FF04050607
残念ですがテキスト欄の16進入力はサポートしておりません。
ウインドウにバイナリ・データ(exeも含む)をドロップすると計算します。
何らかの方法で16進数をバイナリ・データに変換してドロップして下さい。
1byteのバイナリファイル(中身が0x0F)でCRC計算
したところ
初期値:0x0000/出力XOR:0x0000の左送りの場合
CRCのアルゴリズム的には生成多項式によらず
すべて同じ値になるはずですが、
生成多項式が変わると結果も変わりますが
これはバグでしょうか?
よろしくお願いいたします。
8ビットの受信ビット列にX16 を乗じた後、生成多項式 X16+X12+X5+1 でモジュロ2形式で割算した剰余。
このような計算をしたいのですが、初期値やシフト方向などCRCの計算手順を教えてください。
受信データは下位ビット0から送られてきます、最後はビット6でビット7はパリティービットになっています。1キャラクタは右シフトで取り込みcharの配列変数に収めています。
お力をお借りできれば幸いです。