반응형
안녕하세요? 수구리입니다.
이번 포스팅에서는 C++에서 타입 변환과 관련된 글을 쓸려고 합니다.
BYTE라는 배열을 CString으로 변환 후 변환된 CString을 int로 변환하는 내용입니다.
우선 아래의 코드를 보시면..
BOOL CReviewControl::CheckRevolverLimit(int cam)
{
BYTE byte[20] = { 0, };
byte[0] = 'p';
byte[1] = 'x';
byte[2] = 0x0D;
m_cRevolverPort[cam].clearPort();
m_cRevolverPort[cam].sendBytes(byte, 3);
BYTE rbuf[30] = { 0, };
if (ReceiveRevolverPortData(cam, rbuf, 5, 2, COMM_WAIT_TIME) == 0)
{
// BYTE [] to CString
CString str_px((LPCSTR)&rbuf, sizeof(rbuf));
// CString to int
int i_px = _ttoi(str_px);
if (REVOL_LOW_LIMIT < i_px) {
if (i_px < REVOL_HIGH_LIMIT) {
return TRUE;
} else {
// HIGH LIMIT Detected!
return FALSE;
}
} else {
// LOW LIMIT Detected!
return FALSE;
}
}
}
간단하게 위의 함수가 하는 일은
특정 Motor에게 PX라는 Command를 전송하고
응답을 받아와서 해당 값이 SW Limit 값에 위반되지 않는지에 대한 함수입니다.
만약 Limit이 감지되었다면 FALSE를 반환하고 아니라면 TRUE를 반환합니다.
정리하면 이 함수를 통해서 Motor의 위치값이 일정 범위 즉, Limit 내에 존재하냐를 Check 하는 함수입니다.
주석으로 처리된 부분을 보면..
// BYTE [] to CString
CString str_px((LPCSTR)&rbuf, sizeof(rbuf));
// CString to int
int i_px = _ttoi(str_px);
위의 부분이 설명하려고 하는 부분입니다.
이전에 rbuf라는 변수에는 Motor가 준 응답이 들어있으며 이는 BYTE 배열입니다.
따라서 응답받은 BYTE 배열을 rbuf의 크기만큼 CString으로 변환해주는 코드입니다.
이후에 SW Limit을 Check 하기 위해서는 정의되어있는 매크로 상수값과 비교를 해야하기 때문에
String 비교가 아니라 한번 더 형 변환을 통해서 int로 변환해주어야 합니다.
이는 _ttoi 함수를 사용하면 CString을 int로 형 변환을 할 수 있습니다.
이상으로 BYTE to CString & CString to int에 대한 포스팅을 마치겠습니다.
감사합니다.
반응형
'🌈 프로그래밍 > MFC' 카테고리의 다른 글
[ MFC ] list control header 클릭 시 정렬 기능 이벤트 구현 (3) | 2021.11.08 |
---|---|
[ MFC ] Ontimer와 SetTimer, KillTimer 사용법 (0) | 2021.10.26 |
[ MFC ] AfxBeginThread를 사용한 Timer 예제 (1) | 2021.10.20 |
MFC 프로그래밍 시작하기 (4) | 2021.08.06 |