디버그를 하다보면 메모리를 한바이트씩 printf 해볼 때가 있다. (디버거를 쓰기가 좀 곤란하다던지.. 기타등등)

아래의 샘플 코드를 실행하면 결과는 어떻게 될까?
    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변수에 들어있는 값을 한글자씩 읽어다가 그대로 printf 한다. 그런데 결과는 좀 이상하게 찍힌다.

0xffffffea 0xffffffff 0xffffffea 0xffffffff 0x00 0x00 0x00 0x00 0x00 0x00
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++));        // 한바이트씩 프린트해본다.
    }

또는 이렇게...


    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에서 음수를 표현하는 방법
Posted by kuaaan

댓글을 달아 주세요



사랑합니다. 편안히 잠드소서