2010년 1월 27일 수요일

convert char* to unsigned short* 오류

VC 프로그래밍 중에 발생한 오류이다.
C프로그램과 통신하게 해두었더니, char*형 buffer에 메세지를 받아왔는데,
VC로 코딩한 프로그램에 이걸 뿌려주려고 하니까 LPCTSTR이나 CString으로 변환을 해주어야 하는 문제가 생겼다.

처음에는 LPCTSTR로 강제변환을 시켰으나 제대로 나오지도 않고 깨져서 나오는 등의 문제가 발생했다.
그래서 많은 사이트들을 돌아다니며 이에 대한 조언을 구했으나, 다들 강제 type casting으로도 문제가 없는 모양이었다.
나만 이상한건가.. 하고 다른 방법을 강구했다.

만 하루의 삽질끝에 내 프로그램의 문제점을 알아냈다.
LPCTSTR이나 CString은 unsigned short 형이다.
하여 type casting을 해주고 나서 마지막 '\0', 즉 null문자를 안넣어 주었기 때문에 글자가 다 깨져 출력이 된 것이었다.

결국 CString으로 해결보았다.

int nbyte; //buf에 실제 담긴 data양
char buf[128]; //data저장
CString temp; //char to unsigned short에 사용


temp = (CString)buf;
temp.SetAt(nbyte-1, '\0'); //맨 마지막에 null값을 넣는다.
//이 때 왜 '-1'을 해주어야 하는지 미지수..;;;;;
SetDlgItemText(IDC_DATA, temp);
//edit창에 제대로 출력이 된다!!!

아직 궁금한 점이 많긴 하지만, 일단 메세지는 받았구나~_ _)~

댓글 없음:

댓글 쓰기