PGR21.com
이전 질문 게시판은 새 글 쓰기를 막았습니다. [질문 게시판]을 이용바랍니다.
Date 2008/11/22 04:02:36
Name 루시리스
Subject C언어에서 CRC 16 코드 사용법에 관한 질문입니다.
#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값을 만들고자 하는 데이타를 파일로 저장하고 아래 함수의 인자로 파일명을 전달해 주면 된다.

이렇게 나와있는데, 파일을 만들어서 코드의 어디를 어떻게 고쳐야할지 모르겠네요..

아시는분은 한번 예를 들어서 설명해주시면 감사하겠습니다.

통합규정 1.3 이용안내 인용

"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.
법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
꿀호떡a
08/11/22 08:57
수정 아이콘
음.. 위 소스를 ex.exe 와 같이 일단 컴파일하시고, cmd 창에 가셔서 ex.exe input.txt 이런식으로 전달하라는 의도 아닌가요;
08/11/22 12:47
수정 아이콘
VS에서 아무 설정없이 Ctrl+F5 누르면 에러와 함께 끝날 상황이네요. argc가 1이 되지요.
계산식은 대충봐서 잘 모르겠습니다만 로직상으로는 그렇게 이상한 점이 안보이는데요?
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회
45466 컴퓨터가 이상해졌습니다. [3] 강수장1535 08/11/22 1535
45464 급히 헬스 프로그램 짜주세요. [2] 부처1539 08/11/22 1539
45463 장기하 씨는 어떤분인가요.. [7] 잔다르크2597 08/11/22 2597
45462 연극 추천부탁드립니다^^ [1] 찬양자2089 08/11/22 2089
45461 김전일 작가인 사토 후미야씨가 여자? [9] 랩교2873 08/11/22 2873
45460 이런 힙합 음악 아시는 능력자분 없으시나요~ [4] 아이리쉬1943 08/11/22 1943
45458 노래 질문입니다. [1] 남장희1482 08/11/22 1482
45457 패딩점퍼의 대세에 관해서.. [6] 사랑의바보2540 08/11/22 2540
45456 C언어에서 CRC 16 코드 사용법에 관한 질문입니다. [2] 루시리스6834 08/11/22 6834
45455 휴대폰 요금 질문입니다 [12] 천재랜덤-_-v2092 08/11/22 2092
45453 미국 금융위기의 배경 요약 좀 해주세요.. [4] funnyday2114 08/11/22 2114
45450 파일구리 패치가 꺼져요...잉잉 [2] 뒤질랜드2197 08/11/21 2197
45449 왜 lpg차는 장애인만 살수있나요?? [7] 하루를산다2389 08/11/21 2389
45447 선을 그어버렸네요 .. [3] 오월2098 08/11/21 2098
45446 정말 나이트가면?? [16] kmw02363018 08/11/21 3018
45445 좋아하는 이성에게 선물을 주고싶습니다. [3] DeadOrUndead2041 08/11/21 2041
45444 MFC 질문 좀 드릴께요 녹차한잔의여1643 08/11/21 1643
45443 귀 뚫는거에 대한 질문입니다. [4] [RED]Sniper2098 08/11/21 2098
45441 Wii 사야할지 말아야 할지 고민입니다. [1] 키무진김1653 08/11/21 1653
45440 카런과 맵핵 동시에 사용할 수 있나요? [3] 크로우3354 08/11/21 3354
45439 제가 2001년으로 돌아간다면.. [16] 릴리러쉬1908 08/11/21 1908
45438 신용카드 이용 및 해지와 카드 추천 [4] Trademark-G2160 08/11/21 2160
45436 슬픈 발라드곡 추천좀 해주세요. [12] manly_toss4546 08/11/21 4546
목록 이전 다음
댓글

+ : 최근 6시간내에 달린 댓글
+ : 최근 12시간내에 달린 댓글
맨 위로