C++ 바이트 패턴 출력

조회수 1201회

int dwValue = 33; 에 대해선 0x21000000

int dwValue = -33; 에 대해선 0xdfffffff 형식으로 출력하고 싶습니다.

void show_binary(char* pAddr, int size)
{
    cout << "0x";
    char dwBuffer[20];
    int dwValue;

    for (int i = 0; i < size; i++) {
            dwValue = pAddr[i];
        sprintf(dwBuffer,"%02X", dwValue);
        cout << dwBuffer;
    }
    cout << endl;
}

결과가 밑에처럼 나오네요.. 디버깅해보니깐 dwValue가 음수가 나올때 이상하게 나오는 것 같아요. 이미지

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 인텔 CPU 기반의 윈도우에서 작업하는 듯 합니다.

    단순히 리틀엔디안으로 변환하면 됩니다.

    [cling]$ #include<cstdio>
    [cling]$ int i = 33
    (int) 33
    [cling]$ int di = -33
    (int) -33
    [cling]$ printf("0x%x\n", ((i>>24)&0xff) | ((i<<8)&0xff0000) | ((i>>8)&0xff00) | ((i<<24)&0xff000000))
    0x21000000
    [cling]$ printf("0x%x\n", ((di>>24)&0xff) | ((di<<8)&0xff0000) | ((di>>8)&0xff00) | ((di<<24)&0xff000000))
    0xdfffffff
    
    • char[], int, float, double, char 에 대해서 표현해야되는데 원리를 알아야 응용을 할 것 같은데.. 알 수 없는 사용자 2018.12.5 18:50
    • bit shift 로 swap 한거에요.bit shift 에 대해서 학습을 해보세요. 정영훈 2018.12.5 19:04

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)