|
땅주인 님이 쓰신 글 :
: 보내는 쪽을 보니 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);
: : }
|