형변환 2

cast 연산자 사용하여 signed , unsigned 상호 형변환시 매우 주의가 필요

부호 없는 수, 부호 없는 수를 형 변환하거나 형 확장시에 매우 주의해야 된다. 문자열 관련 처리를 하는 과정에서 각각의 1바이트 char형 문자들을 계산하기 편하게 4바이트로 확장시켜서 연산을 하는데 의도하지 않았던 결과가 나와서 디버그해보니 그동안 형 변환에 대해 좀 착각해왔음을 알 수 있었다. char a = 0xB1; // ( 128보다 크므로 실제로는 음수값이다.) unsinged int b = (unsigned int)a; 혹은 unsinged int b = a; 여기서 b에는 0xB1이 아니라 0xFFFFFFB1 값이 들어간다. 일단 int형으로 변환을 먼저 시킨 후 unsigned로 변환하는 듯 하다. 위에서 b에 0xB1 값을 대입하고자 하는 목적인 경우에는 unsigned int b =..

C, C++ 문법 2011.07.21

COM, ATL에서의 reinterpret_cast 의 쓰임새

그동안 C++에서 reinterpret_cast를 배우긴 배웠는 데 실제로 써먹는 경우가 없었다. 그런데 컴포넌트 작성하면서 쓰게 될 줄이야~~~ 커넥션 포인터 관련 얻는 부분의 코드 조각이다. m_rgpCP[0] = new CConnectionPoint(reinterpret_cast(this), DIID__DIDragonEvents); 사전적 의미는 "재해석해서 캐스트"한다.... 즉 강제 형변환 캐스팅이다. 컴파일러는 약간 지능적이다. 클래스 형변환시 부모 - 자식 관계의 형태에서 포인터 관련코드 디버그해보면서 놀랐던 기억이 난다. 그 전까지 형변환으로 사용했던 것은 모두 reinterpret_cast(강제 형변환) 의미를 가진 것이었다. 이를테면 핸들값을 스파이로 알 경우.... HWND hWnd ..

COM, ATL 2008.09.11