저도 초보자인데요. 혹시 도움이 될까 해서..
byte 로 받으신다면.
str := str + IntToHex(byte(buf[i]),2);
말고
str := str + Char(buf[i]);
로 처리 하시면 앞의 CD 0E AF 81 0B 은 묘상한 문자로 찍힌다해도
뒤의 전화 번호 30 37 30 37 34 39 39 34 32 30 30 는 결국 아스키로 0 7 0 7 4 9 9 4 2 0 0 일 터이니..
str := xxxxx07074994200
으로 될 텐데요.
앞의 5개( CD 0E AF 81 0B ) 를 따로 뽑아서 이것만 비교해서
if cmd = 앞의 5개 then str := str + Char(buf[i+5]);
순으로 처리 하면 어떨가 하네요..
그런데 RxChar에서 저렇게 처리 하면
간혹 데이터가 짤려서 들어올 경우도 있을텐데 그것도 염두 하셔야 할듯 싶네요.
초보자가 쓰는 글이나 엉성두성 하네요;;;
영길선생 님이 쓰신 글 :
: ------------
: procedure TForm1.ComPortRxChar(Sender: TObject; Count: Integer);
: var
: buf : array[0..1024] of byte;
: str, str2, str3 : AnsiString;
: tmpStr : String;
: cnt, i : Integer;
: begin
: cnt := comport.InputCount;
: comport.Read(buf, cnt);
:
: str :='';
: str2 := '';
: for i := 0 to cnt - 1 do begin
: str := str + intToHex(byte(buf[i]), 2);
: str2 := str2 + AnsiChar(Buf[i]);
: end;
: Memo.Lines.Add('Hex : ' + str);
:
: end;
:
: -------------
:
: 시리얼 통신을 사용하여 메시지가 들어오면 그 메시지에서 전화번호만 추출할려고 합니다.
:
: str 을 출력해 보면
:
: CD 0E AF 81 0B 30 37 30 37 34 39 39 34 32 30 30
:
: 이런식으로 값이 들어 옵니다.
:
: CD 0E AF 81 0B 이 값을 기준으로 전화 번호가 들어오고 있다고 인식을 하게 만들고 싶습니다.
:
: 그런 후 전화번호 앞마다 붙어 있는 3을 제거 하는게 최종 목표 입니다.
:
: 어떻게 하면 되나요..
:
: 델파이 초보라서 문의 드립니다.
:
:
: CD 0E AF 81 0B 30 37 30 37 34 39 39 34 32 30 30
|