Delphi Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
델파이 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
FreePascal/Lazarus
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
델마당
볼랜드포럼 광고 모집

델파이 Q&A
Delphi Programming Q&A
[14191] Re:원하는 숫자만 봅아 낼 수 있을까요?!
디딜 [byby111] 2145 읽음    2012-03-28 14:33
저도 초보자인데요. 혹시 도움이 될까 해서..

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

+ -

관련 글 리스트
14187 원하는 숫자만 봅아 낼 수 있을까요?! 영길선생 1853 2012/03/27
14191     Re:원하는 숫자만 봅아 낼 수 있을까요?! 디딜 2145 2012/03/28
14190     Re:원하는 숫자만 봅아 낼 수 있을까요?! 영채 2021 2012/03/28
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.