#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
unsigned int CRC16R(char data, unsigned int crc16);
void main(int argc, char *argv[])
{
FILE *in;
//unsigned char data[250];
unsigned char *data;
long len,fl,i;
int tc;
unsigned char temp;
unsigned int crc1,crc2,crc16;
crc1=0;
crc2=0;
crc16=0xffff;
if(argc<2){
printf("usage : crc <filename>\n");
return;
}
if((in = fopen(argv[1],"rb")) == NULL){
printf("can't open %s\n",argv[1]);
return;
}
// read from file
fseek(in,0L,SEEK_END);
fl = ftell(in);
fseek(in,0L,SEEK_SET);
data = (unsigned char *)malloc(fl);
memset(data, '\0', sizeof(data));
for(len=0;len<fl;len++) {
tc = fgetc(in);
if (EOF==tc) {
fclose(in);
}
data[len]= (unsigned char)tc;
}
data[len]='\0';
// calc. crc
for (i=0;i<len;i++){
temp = data[i];
crc16=CRC16R(temp, crc16);
printf("0x%2x, 0x%4x\n", temp, crc16);
}
crc1 = crc16 & 0xff;
if (crc1 <0x80) crc1 ^= 0xff;
crc2 = ((crc16>>8)&0xff);
if (crc2 <0x80) crc2 ^= 0xff;
printf("crc16 is 0x%4x\n",crc16);
printf("crc1 is 0x%2x\n",crc1);
printf("crc2 is 0x%2x\n",crc2);
free(data);
getch();
}
unsigned int CRC16R(unsigned char data, unsigned int crc16)
{
int i;
unsigned int temp_crc16;
unsigned char temp_data;
temp_crc16 = crc16;
temp_data = (unsigned char) data;
temp_data <<=1;
for ( i = 8; i > 0; i--){
temp_data >>= 1;
if ((temp_data ^ temp_crc16) & 0x0001)
temp_crc16 = (temp_crc16 >> 1) ^ 0x8408;
else
temp_crc16 >>= 1;
}
return(temp_crc16);
}
사용 방법은 crc값을 만들고자 하는 데이타를 파일로 저장하고 아래 함수의 인자로 파일명을 전달해 주면 된다.
이렇게 나와있는데, 파일을 만들어서 코드의 어디를 어떻게 고쳐야할지 모르겠네요..
아시는분은 한번 예를 들어서 설명해주시면 감사하겠습니다.