- ベストアンサー
CRC16コード作成プログラムの作成方法
- CRC16コード作成プログラムの作成方法について
- CRC16コード作成プログラムを作成する際のポイント
- CRC16コード作成プログラムの実装方法
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>私ともう一人だけで使うプログラムなので、入力された文字数が奇数、16進数以外の入力は気を付けるって前提でやります(^_^;) 使う側が気をつける。 ということでエラー処理を省いていくなら…… int main(void) { unsigned char str[256],data[128],hexstr[3]; unsigned short crc,len; printf("Please input key (HEX)\n"); scanf("%255s", str); hexstr[2]='\0'; for(len=0;len < (strlen(str)/2);len++) { hexstr[0]=str[len*2]; hexstr[1]=str[len*2+1]; data[len]=(unsigned char)strtol(hexstr, NULL, 16); } crc = crc_cal(len,data); printf("crc=%04X\n", crc); return 0; } こんなところでしょうかねぇ……。 # (strlen(str)/2)は変数に置き換えるかも知れませんが。 # まぁ、そのくらいはコンパイラの最適化が入りますかね……。 crc_cal()の中身に関しては…未検証ですけど……。
その他の回答 (1)
- Wr5
- ベストアンサー率53% (2173/4061)
>“0C0C0C0C0C0C”と入力したら 文字列として扱いたいのですか? 0C 0C 0C 0C 0C 0C のバイナリ列として扱いたいのですか? >scanf("%c",&str0); // 文字列標準入力 ラインエディタを自作したい(BackSpace/Delete/カーソル移動キーとか押されたらどうします?)なら別ですが… "%s"で入力した方が楽かと思われます。 # scanf("%255s", str)としておけばバッファオーバーランしないでしょう。 # http://www.kijineko.co.jp/tech/superstitions/buffer-overrun-of-scanf.html バイナリ列として扱いたい場合は、入力されたHEX文字列からバイナリ列への変換が必要でしょう。 2文字切り取って16進文字列=>数値変換な関数で変換…ですかね。 # http://www1.cts.ne.jp/~clab/hsample/Func/Func12.html とか # strtol() とか(戻り値はlong型なので注意が必要ですが…)。 2文字ずつ切り出すことになるので入力された文字数が奇数だった場合をどうするか…というのもありますのでご注意を。 # 16進数文字列以外が入力された場合…なんてのもありますねぇ。 crc_cal()の第1引数に渡す値についても注意が必要…ですけどね。 # (strlen(str) + 1) / 2 とか。16進数文字以外があったりするとこの手は使えませんけどね…。
お礼
お返事ありがとうございます! バイナリで扱いたかったですが、文字列でしか入力法がわからなかったってのが正直です。。。 私ともう一人だけで使うプログラムなので、入力された文字数が奇数、16進数以外の入力は気を付けるって前提でやります(^_^;) 戻す値の注意が必要となると・・・あきらめようかなぁ。。。
お礼
お返事遅くなり、申し訳ございません! そしてありがとうございます! コンパイルできまして、すごく使えています!! ありがとうございました!