• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:CRC16コード作成プログラムについて)

CRC16コード作成プログラムの作成方法

このQ&Aのポイント
  • CRC16コード作成プログラムの作成方法について
  • CRC16コード作成プログラムを作成する際のポイント
  • CRC16コード作成プログラムの実装方法

質問者が選んだベストアンサー

  • ベストアンサー
  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.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()の中身に関しては…未検証ですけど……。

akibon1jp
質問者

お礼

お返事遅くなり、申し訳ございません! そしてありがとうございます! コンパイルできまして、すごく使えています!! ありがとうございました!

その他の回答 (1)

  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.1

>“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進数文字以外があったりするとこの手は使えませんけどね…。

akibon1jp
質問者

お礼

お返事ありがとうございます! バイナリで扱いたかったですが、文字列でしか入力法がわからなかったってのが正直です。。。 私ともう一人だけで使うプログラムなので、入力された文字数が奇数、16進数以外の入力は気を付けるって前提でやります(^_^;) 戻す値の注意が必要となると・・・あきらめようかなぁ。。。

関連するQ&A