C言語のキャストについて
お世話になります。
CRC-16の計算プログラムをC言語でつくりました。
例えば・・・1F 08 00 00 12 34 なら“1F0800001234”と入力すると【EEC2】と表示するプログラムです。
ただ・・・.Net SDKでコンパイルするとできたのですが、Visual C++2008でコンパイルするとエラーが出てしまいます。
(48) : error C2664: 'strlen' : 1 番目の引数を 'unsigned char [256]' から 'const char *' に変換できません。(新しい機能 ; ヘルプを参照)
1> 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。
(52) : error C2664: 'strtol' : 1 番目の引数を 'unsigned char [3]' から 'const char *' に変換できません。(新しい機能 ; ヘルプを参照)
1> 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。
型変換が必要ってことまではわかったのですが・・・必要なのはわかって行き詰まり状態です。。。
どのようしたらよいのでしょうか?ご教授をよろしくお願いします。
ソースは以下の通りです。
#include "stdafx.h"
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
unsigned short crc_cal(unsigned short lng, unsigned char *str)
{
unsigned short crc, i, j, t;
t= 0x0000;
crc = 0xffff;
for (i = 0; i < lng ; i++)
{
crc ^= (unsigned short) str[i];
t = (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;
}
int main(void)
{
unsigned char str[256],data[128],hexstr[3];
unsigned short crc,CRC,len;
while(1)
{
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);
CRC = (crc>>8) | (crc<<8);
printf("\nCRC16 = %04X\n\n", CRC);
}
return 0;
}
お礼
>C/C++のどちらでコンパイルしていますか? C++でした。 試しにCでコンパイルしたところエラー無しでした。 ありがとうございます。