디버그를 하다보면 메모리를 한바이트씩 printf 해볼 때가 있다. (디버거를 쓰기가 좀 곤란하다던지.. 기타등등)
아래의 샘플 코드를 실행하면 결과는 어떻게 될까?
모 아주 간단한 코드이다. Char변수에 들어있는 값을 한글자씩 읽어다가 그대로 printf 한다. 그런데 결과는 좀 이상하게 찍힌다.
어렵쇼?? 저건 또 모여... 왜 0xea가 0xffffffea로 찍히지?
결론부터 얘기하면.. 위의 코드는 이렇게 수정되어야 한다.
또는 이렇게...
CHAR cBuf[10] = {0xea, 0xff, 0xea, 0xff,}; // 확인해볼 메모리 영역
CHAR* lpCur = cBuf; // CHAR 변수로 포인팅해서
for (INT nIndex = 0; nIndex < sizeof(cBuf); nIndex++)
{
printf("0x%02x ", (BYTE)*(lpCur++)); // 한바이트씩 프린트해본다.
}
왜 그럴까...???
Hint 1 : BYTE의 정의는 다음과 같다.
Hint 2 : 형변환
Hint 3 : Signed Data Type에서 음수를 표현하는 방법
아래의 샘플 코드를 실행하면 결과는 어떻게 될까?
CHAR cBuf[10] = {0xea, 0xff, 0xea, 0xff,}; // 확인해볼 메모리 영역
CHAR* lpCur = cBuf; // CHAR 변수로 포인팅해서
for (INT nIndex = 0; nIndex < sizeof(cBuf); nIndex++)
{
printf("0x%02x ", *(lpCur++)); // 한바이트씩 프린트해본다.
}
printf("\r\n");
CHAR* lpCur = cBuf; // CHAR 변수로 포인팅해서
for (INT nIndex = 0; nIndex < sizeof(cBuf); nIndex++)
{
printf("0x%02x ", *(lpCur++)); // 한바이트씩 프린트해본다.
}
printf("\r\n");
모 아주 간단한 코드이다. Char변수에 들어있는 값을 한글자씩 읽어다가 그대로 printf 한다. 그런데 결과는 좀 이상하게 찍힌다.
0xffffffea 0xffffffff 0xffffffea 0xffffffff 0x00 0x00 0x00 0x00 0x00 0x00
Press any key to continue
Press any key to continue
어렵쇼?? 저건 또 모여... 왜 0xea가 0xffffffea로 찍히지?
결론부터 얘기하면.. 위의 코드는 이렇게 수정되어야 한다.
CHAR cBuf[10] = {0xea, 0xff, 0xea, 0xff,}; // 확인해볼 메모리 영역
BYTE* lpCur = (BYTE*)cBuf; // CHAR 변수로 포인팅해서
for (INT nIndex = 0; nIndex < sizeof(cBuf); nIndex++)
{
printf("0x%02x ", *(lpCur++)); // 한바이트씩 프린트해본다.
}
BYTE* lpCur = (BYTE*)cBuf; // CHAR 변수로 포인팅해서
for (INT nIndex = 0; nIndex < sizeof(cBuf); nIndex++)
{
printf("0x%02x ", *(lpCur++)); // 한바이트씩 프린트해본다.
}
또는 이렇게...
CHAR cBuf[10] = {0xea, 0xff, 0xea, 0xff,}; // 확인해볼 메모리 영역
CHAR* lpCur = cBuf; // CHAR 변수로 포인팅해서
for (INT nIndex = 0; nIndex < sizeof(cBuf); nIndex++)
{
printf("0x%02x ", (BYTE)*(lpCur++)); // 한바이트씩 프린트해본다.
}
왜 그럴까...???
Hint 1 : BYTE의 정의는 다음과 같다.
typedef UCHAR BYTE;
// (UCHAR는 unsigned char)
Hint 2 : 형변환
Hint 3 : Signed Data Type에서 음수를 표현하는 방법
'C++' 카테고리의 다른 글
문자열 함수 "_s" 시리즈 분석 (_tcsncpy_s 등) (10) | 2008.09.29 |
---|---|
MBCS 프로젝트 유니코드 전환 가이드 (0) | 2008.08.23 |
MBCS 문자열 다룰 때 마지막 글자가 깨지는 현상 (2) | 2008.08.23 |
문자열 함수들의 버퍼 체크 방법 차이 (11) | 2008.08.22 |
클래스의 소멸자가 가상함수여야 하는 경우 및 이유 (1) | 2008.08.19 |