CRC16コード作成プログラムについて
お世話なります。
PCと対象機械との通信を行おうと思っております。
内容としてCRC16のコードを使って、日時設定をPC→対象機器へ行いたいです。
CRC16の生成プログラムをいろいろ調べてみたところ、
今、自分のスキルでなんとかわかりそうなCRC16のソースが次の通りでした。
(行列の計算ぐらいならC言語で作れる程度です。。。)
unsigned short crc_cal(unsigned short lng, unsigned char *str)
{
unsigned short crc, i, j, t;
crc = 0xffff;
for (i = 0; i < lng ; i++)
{
crc ^= (unsigned short) str[i];
for (j = 1; j <= 8; j++)
{
if (crc & 1)
{ // carry bit on
crc = crc >> 1;
crc ^= 0xa001;
}
else
{ // carry bit off
crc = crc >> 1;
}
}
}
return crc;
}
“0C0C0C0C0C0C”と入力したら、CRCコードが算出されるプログラムを作りたく、
入力部分を作成してみたのですが・・・
int main(void)
{
unsigned short i,j, t;
unsigned char str[256];
unsigned char str0;
unsigned short crc;
int k=0;
printf("Please input key (HEX)\n");
for(k=0; k < 256; k++)
{
scanf("%c",&str0); // 文字列標準入力
if( str0=='\n') // Enterが押されたときの実行
{
str[k]='\0'; // 文末にNULL文字
break; // for文のループ終了
}
else
{
str[k]=str0; // NULLでなければ入力された文字を代入
}
}
crc = crc_cal(k,str);
printf("crc=%X\n", crc);
return 0;
}
文字列を分解して・・・やるんだろうなってまではなんとなくわかるのですが、
どのようにしたらよいでしょうか。。。
ご教授よろしくお願いします。
お礼
ありがとうございました。 何とか自力で解決できました。 # ちなみにUSB関係ではないです^^; ちょっとマニアックなモノですわ。