프로그램 암만 쳐다봐도 모르겠네요 ㅠㅠ
//----- 수신값을 일반텍스트 문자열로 변환해서 넘기기.. 함수 -----
strRcvData2Char( int xPortNo, int nRcvSize )
{
//--> 수신 횟수..
CString strData;
strData.Format( "%5d : ", g_byRcvBuf[xPortNo][0] );
CString strTemp;
BYTE byData;
//--> 수신 갯수만큼..
for( int i=1; i<=nRcvSize; i++ )
{
byData = g_byRcvBuf[xPortNo][i];
//byData 가 널이면.. 따로 처리해야 한다..문자열이 안보이거든요..
if( byData == NULL )
{
strData += _T( " " ); //--> 널문자는..공백으로 대체..
continue;
}
//--> char 형으로..
strTemp.Format( "%c", byData );
strData += strTemp;
}
for(int d=1;d<=nRcvSize; d++)
{
//--> 맨 뒤에는 줄바꿈..다음을 위해서리...
strData += _T( "\r\n" );
//--> 변환된 문자열 넘김.
return strData;
}
첫번째, 여기서 문자가 8바이트씩 짤려서 출력이 되는데 도데체 어느부분에서 그렇게 되는거죠
두번째, 문자열에서 원하는 위치의 바이트를 문자로 가지고 오거나 숫자로 변환하는 방법은 없나요
ABCDEFGH12345678
에서 하나의 char형 변수에 H를 저장시키고
다른 하나의 int형 변수에 12345678을 저장시키고 싶은데요..
방법이 없을까요
꼭 답변 부탁드립니다
문자가 8바이트씩 들어오지는 않을 겁니다.;;
항상 달라질수 있습니다. int nRcvSize 변수값에 수신된 바이트 수가 있으니 확인하실수 있을 겁니다.~~
예를 들어 24바이트를 받아야 하는데, 8바이트씩 3번 받을수도 있고, 7+7+7+3 바이트로 받을 수도 있습니다.
이런 이유는 수신쓰레드가 무한히 돌면서 수신된 값이 있을 때마다 메세지를 날리는데,
메세지 날아오는 간격이 일정치 않아서 그런겁니다.;;
쓰레드에 대해 아시면 쉽게 이해하실텐데.. 일단 이것은 모르셔도 됩니다;;;;
해결방법은
전역 변수로 문자열을 만들고 그 문자열에 수신데이터를 계속 쌓으면 됩니다.
그리고 수신된 데이터를 분석하고, 필요 없으면 버리고, 유요한 데이터면 사용하면 됩니다.
예를 들어, "ABCDEF", "GH1234" , "5678" 로 3번 값이 들어오던
"ABCD", "EFGH12", 345678" 로 값이 오던,
"ABCDEFGH12345678" 라는 데이터가 들어오게 됩니다.
일단 이런식으로 데이터를 받으면 놓치는 데이터는 없을 겁니다.
2번 같은 경우는,
STX, ETX, CRC 를 추가하여 하나의 패킷구조로 통신해야 가능합니다.
먼저 수신된 데이터가 유효한지를 검사해야 원하는 위치의 데이터를 얻을 수 있습니다.