Q&A

  • crc 16을 구하는 함수 요청합니다
델파이에서 포인터,비트계산 등을 해 본적이 없어서 아래의 C 함수를 델파이로 변환하려니 막막합니다..
오늘중으로 마무리를 해야하는 프로그램에서 중요한 부분인데 전혀 진척이 없습니다..
아래의 C함수를 데리파이 소스로 변환해 주시면 감사드리겠습니다..
수고하세요..

int get_crc(char *ptr, int *count)
{
    int crc = 0, i;

    while (--*count >= 0) {
        crc = crc ^ (int) *ptr++ << 8;

        for (i = 0; i < 8; ++i) {
            if (crc & 0x8000)
                crc = crc << 1 ^ 0x1021;
            else
                crc = crc << 1;
        }
    }

    return (crc & 0xFFFF);
}
4  COMMENTS
  • Profile
    석주현 2004.10.21 18:44
    값을 확인 할 수 가 없어서 잘은 모르겠지만
    아래와 같이 하면 됩니다.
    ============================================================
    function TForm1.get_crc(ptr : pChar; count : pInteger) : Integer;
    var
      crc, i : Integer;
    begin
      while ( count^ >= 0 ) do
        begin
          crc := 0;
          crc := crc xor (integer(ptr^) shl 8);

          for i:=1 to 8 do
            begin
              if (crc and $8000) <> 0 then
                crc := (crc shl 1) xor $1021
              else
                crc := (crc shl 1);
            end;
          dec(count^);
        end;
      result := (crc and $FFFF);
    end;
  • Profile
    강신구 2004.10.21 19:43
    답변에 감사드립니다..

    답변주신 내용에서 한가지 빠진 부분이 있어서 추가 질문을 드립니다..

    C함수 : crc = crc ^ (int) *ptr++ << 8;
    델파이 : crc := crc xor (integer(ptr^) shl 8);

    *ptr++ 은 어떻게 처리를 해야 하는지 모르겠습니다..

  • Profile
    석주현 2004.10.21 20:34
    흐흐 그걸 빼 놓았네요..

    아래에 추가 했습니다...
    간단하게 포인터 증가는 inc(포인터명) 이걸 씁니다.

    ============================================================
    function TForm1.get_crc(ptr : pChar; count : pInteger) : Integer;
    var
      crc, i : Integer;
    begin
       crc := 0; // 이것도 위치가 잘못된거 같네요.. 생각해 보니 ㅠ_ㅠ

      while ( count^ >= 0 ) do
        begin
          crc := crc xor (integer(ptr^) shl 8);

          inc(ptr); // 추가 한거 ^^

         for i:=1 to 8 do
            begin
              if (crc and $8000) <> 0 then
                crc := (crc shl 1) xor $1021
              else
                crc := (crc shl 1);
            end;
          dec(count^);
        end;
      result := (crc and $FFFF);
    end;

  • Profile
    강신구 2004.10.21 21:48
    감사합니다..
    해결되었습니다..
    많은 도움이 되었습니다..
    • 김진태
    • 2004.10.22 08:44
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 김진태
      2004.10.23 02:43
    • 이영주
      2004.10.22 22:04
      재미 있을것 같아 만들어 보았습니다. 좀 거친듯한 느낌은 드는군요. 메모장의 메뉴를 참고하였습니다. ...
    • 권오현
      2004.12.23 01:55
      안녕하세요. 저도 님과 같은 궁금증 있어 아래와 같이 해보니 그런대로 원하는 동작이 되더라구요. ...
    • 김민우
    • 2004.10.22 06:59
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 권태훈
      2004.10.22 22:54
      var   a1,a2 : String;   answer : Integer;   r1 : String; begin ...
    • Maru
      2004.10.22 06:32
      저는 이거 하루종일 고민하여.(글올리고 답글달기까지 고민함 -_-), 누군가 레지스트리를 건드려서 가...
    • 박준영
      2004.10.23 20:52
      혼자서 별짓 다해보다가 눈가리고 아웅인지는 모르지만 해결을 했습니다. 제가 Text 필드를 UpDate 쿼리...
    • 일그니
      2004.10.21 20:27
      Copy, POS, Length 이 세개의 함수를 이용하시면 무난 하실것 같습니다.
    • 최수림
    • 2004.10.21 19:35
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 정동욱
      2004.10.21 21:05
      [...] 1.어느쪽이 클라이언트 역할을 하느냐?. 2.최소한 초단위 보다 더빨리 모니터링 해야 한다,...
    • 송득보
    • 2004.10.21 18:43
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 김일득
      2004.11.16 00:43
      Thread에서 TQuery 등의 VCL콤포넌트를 사용하기위해서는 TDataBase코포넌트와 VCL 콤포넌트를 1:1...
    • 정동욱
      2004.10.21 19:12
      [...] http://www.overbyte.be  에 가면 francois piette 라는 사람이 만든 MidWare ...
    • 강신구
    • 2004.10.21 18:20
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 석주현
      2004.10.21 18:44
      값을 확인 할 수 가 없어서 잘은 모르겠지만 아래와 같이 하면 됩니다. ==============================...
    • 강신구
      2004.10.21 19:43
      답변에 감사드립니다.. 답변주신 내용에서 한가지 빠진 부분이 있어서 추가 질문을 드립니다.. C함수...
    • 석주현
      2004.10.21 20:34
      흐흐 그걸 빼 놓았네요.. 아래에 추가 했습니다... 간단하게 포인터 증가는 inc(포인터명) 이걸 씁니다...
    • 강신구
      2004.10.21 21:48
      감사합니다.. 해결되었습니다.. 많은 도움이 되었습니다..
    • 하얀까마귀
      2004.10.21 18:26
      전체 필드나 전체 레코드가 바뀐건 님께서 루틴을 잘못만드신걸로 보이네요.. 밑에 있는 루틴은 참고 하...
    • 석주현
      2004.10.21 18:12
      다른 분이 해주신거에서 조금만 고치면 되는건데 -_-;; 아래 고친 거 입니다. 잘만 확인 하시면 바로 활...
    • 박원용
      2004.10.21 20:43
      아~~ 이제 정말 잘되네요... 갑자기 프로그램을 만들다보니.. 모르는것이 너무 많아서. 헤헤.. 답변...
    • 깜찌기
    • 2004.10.21 09:46
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 석주현
      2004.10.21 18:19
      Direct Input 을 이용하시면 간단하게 해결됩니다. 음 예전에 올라와 있던 DelphiX 같은 VCL 팩키지를 ...
    • 기타맨
    • 2004.10.21 02:00
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 하얀까마귀
      2004.10.21 18:37
      다른 문제겠죠? 해당 폼 내의 다른 루틴상의 문제라고 생각되어 지네요. ㅠㅠ 채팅폼의 루틴을 하나하...
    • 황영신
    • 2004.10.21 01:05
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 우용우
    • 2004.10.21 00:34
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 정동욱
      2004.10.21 01:43
      [...] 한마디로 엄청난 벌레를 만들었네요. SendBuf(Sendjpg,sizeof(Sendjpg)); 이 문장은 말...
    • 우용우
      2004.10.21 02:49
      답변 감사드립니다. 아직 기량이 부족해서 Sizeof 에 에러가있을줄 꿈에도몰랐습니다..ㅜ.ㅜ 헌데 님이 ...
    • 이근석
    • 2004.10.20 23:40
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 하얀까마귀
      2004.10.22 04:07
      안녕하세요 하얀까마귀 입니다.. 요즘 디비라고는 안해서 통~~~~ ㅎㅎ 손놓은지 수년이네요. 3-4년 되는...
    • 석주현
      2004.10.21 18:22
      전 델파이에선 그런 경우가 없었는데 씨 빌더에서 하다 보니 저번에 ParamBy 를 이용해서 파라메터 ...
    • 최성준
      2004.10.21 00:07
      1. 변수에 담아서 해보세요 예) temp := '''A'',''B''';
    • 이근석
      2004.10.21 00:18
      변수에 대입 방법을 써 보았지만 안돼는군요. (ㅜ.ㅜ)
    • 정동욱
      2004.10.21 02:08
      [...]   FormatDateTime( 'hh:nn:ss' ,  IncMinute( Now , 1 ) );  &n...
    • 석주현
      2004.10.21 01:08
      procedure TForm1.Button1Click(Sender: TObject); var   StartTime, EndTime, AddTime : TDat...
    • 석주현
      2004.10.21 00:39
      StartTime, AddTime,EndTime : TDateTime 로 선언 하시고 EncodeTime 으로 각각 인코드 해서 넣어 ...
    • 김정현
    • 2004.10.20 22:48
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2004.10.21 01:29
      안녕하세요. 최용일입니다. 소스가 없으면 불가능합니다. 델파이는 이진호환이 안됩니다. dcu, b...
    • 김정현
      2004.10.21 01:47
      에고...그럼 혼자 쇼를 했네요 ^^ 답변 정말 감사합니다. 다시 공부하고 오겠습니다. 최용일님 하루...
    • 최용일
      2004.10.20 21:48
      안녕하세요. 최용일입니다. OnKeyDown에서 하세요... if Key = VK_RETURN then    &...
    • 고진중
      2004.10.20 23:08
      답변 감사합니다.. 그런데 답변하신 내용은 질문전에 해봤던건데 안되요 ㅜㅜ
    • 최용일
      2004.10.21 01:21
      안녕하세요. 최용일입니다. 어떤것을 원하는지 잘 모르겠네요... 아래 코드는 일반적인 컨트롤이나 ...