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

C++빌더 Q&A
C++Builder Programming Q&A
[62126] Re:Comport 수신 데이터 처리
땅주인 [heaven2] 1559 읽음    2010-08-11 09:26
보내는 쪽을 보니 C....E는 문자지만.. 그 안의 데이터는 문자가 아닌 숫자값을 보내내요.
그것을 수신쪽에서 문자로 치환하면 당근 안되겠지요..
송신쪽에서 이렇게 보내면 수신쪽에서 처리할 형태를 peosude 코드 형태로 적어보면

WORD x,y;// 두 개의 좌표값(송신 시 2byte씩 사용하였으니 이렇게 사용

ComPort1->ReadStr(str);
memcpy(&x, str.c_str() + 1, 2); // x 좌표값 복사
memcpy(&y, str.c_str() + 3, 2); // y 좌표값 복사

int iX = ntohs(x);  // big endian => little endian으로 치환
int iY = ntohs(y);  // big endian => little endian으로 치환

정확히 똑같은 코드가 나오지는 않겠지만..대충 위와 같은 알고리즘으로 진행하면 될 것 같네요.

그리고, 두 대의 PC간의 통신이나 다른 서로 다른 컴퓨터,장비등의 통신에
사용되는 통신 프로토콜 규약을 좀더 공부해 보는 것이 좋을 듯 하네요..
CxxxxE 이렇게 보다는 보통 STX <-> MessageType <-> Length <-> Payload <-> CRC <-> ETX 등의
형태를 따르는 것이 일반적인 형태입니다. 보통은 byte단위로 다 처리하지요.. .

그럼 도움이 되시길..


김병규 님이 쓰신 글 :
: PC 두대를 이용해서 데이터 통신 중입니다.
:
: 아래는 그 소스 인데요.. 한쪽 PC에서 영상처리를 하여 원의 중심을 찾아서
:
: 그 중심 데이터를 다른쪽 PC로 전송하고 있습니다.
:
: 보낼때 각 Pixel 값을 상위 비트 하위비트로 나누어서 보냈구요
:
: 다른쪽 PC에서 이 데이터를 받아서 제가 원하는 데이터로 다시 변환 할려니
:
: 되지가 않아서요..
:
: 수신 쪽에서 Comport를 사용하여 ComPort1->ReadStr(str);
:
: 들어오는 데이터에서 C를 찾아내어 필요한 갯수만큼 짤라내면
:
: CㅁㅁㅁㅁE   <-- 요렇게 들어는 옵니다. 물론 저기 네모는 영 이상한 문자로
:
: 표현이 되더군요..
:
: 저 데이터를 다시 상위 비트와 하위비트를 합쳐서 원 데이터로 변환하고 싶은데..
:
: 잘안되어서요..
:
: 저기 네모는 스트링이 잖아요.. 그럼 이 스트링을 다시 케릭터로 바꾸어 주어야 될꺼 같은데..
:
: sprintf(c, "%c", str.c_str());  <-- 이런식으로 하면 안되는 건가요?
:
: 변환을 어떻게 해야 하는건지 잘 모르겠네요..
:
: 조언좀 부탁드리겠습니다.
:
:
: // 송신부
: void __fastcall TForm1::BitBtn3Click(TObject *Sender)
: {
:     unsigned int uiX, uiY;
:     unsigned char ucXH, ucXL, ucYH, ucYL, ucOrgXH, ucOrgXL, ucOrgYH, ucOrgYL;
:    
:     // uiX와 uiY 는 Pixel데이타로 0~640 까지 입니다.
:
:     ucXH = (unsigned char)(uiX >> 8) & 0x00ff;
:     ucXL = (unsigned char)(uiX & 0x00ff);
:
:     ucYH = (unsigned char)(uiY >> 8) & 0x00ff;
:     ucYL = (unsigned char)(uiY & 0x00ff);
:
:     sprintf(c, "C%c%c%c%cE", ucXH, ucXL, ucYH, ucYL);
:
:     ComPort1->Write(c, 6);
: }

+ -

관련 글 리스트
62121 Comport 수신 데이터 처리 김병규 1123 2010/08/10
62126     Re:Comport 수신 데이터 처리 땅주인 1559 2010/08/11
62132         Re:Re:답변 감사 드립니다~ (냉무) 김병규 970 2010/08/11
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.