char 와 unsigned char



char : -128 ~ 127 

unsigned char : 0 ~ 255


흔히 아는 byte 는 unsigned char 이다. 

특히 byte(char*)에서 변환시에 주의 해야 한다. 그냥 char 로 변환되는 숫자 영역대가 존재 하기 때문. 


 stringstream ss;
    ss << "=== char* ===========================" << "\r\n";

    int src = 2685;
    int tmp = 0;
    int r = 0;
    for (size_t i = 0; i < 10; i++)
    {
        
        tmp = 2685 + i;
        char* bytes = (char*)&(tmp); // int 를 byte array 로 변환
        r = (bytes[3] << 24) | (bytes[2] << 16) | (bytes[1] << 8) | bytes[0]; // byte arrayint 로 변환
        ss << tmp << " : " << r << "\r\n";
    }
    ss << "\r\n";
    ss << "=== unsigned char* ==================" << "\r\n";

    for (size_t i = 0; i < 10; i++)
    {

        tmp = 2685 + i;
        unsigned char* bytes = (unsigned char*)&(tmp); // int 를 byte array 로 변환
        r = (bytes[3] << 24) | (bytes[2] << 16) | (bytes[1] << 8) | bytes[0]; // byte arrayint 로 변환
        ss << tmp << " : " << r << "\r\n";
    }

    cout << ss << endl;
    ofFile f("char_test.txt" , ofFile::WriteOnly);
    f << ss.str();
    f.close();


의 결과는 ...


char 는 비정상 변환이 있다.


=== char* ===========================

2685 : 2685

2686 : 2686

2687 : 2687

2688 : -128

2689 : -127

2690 : -126

2691 : -125

2692 : -124

2693 : -123

2694 : -122


=== unsigned char* ==================

2685 : 2685

2686 : 2686

2687 : 2687

2688 : 2688

2689 : 2689

2690 : 2690

2691 : 2691

2692 : 2692

2693 : 2693

2694 : 2694



추가: char* 를 unsigned char* 로 바꾸어 변환 하기

int bytesToInt(char* nbytes) { unsigned char* bytes = reinterpret_cast<unsigned char*>(nbytes); return (bytes[3] << 24) | (bytes[2] << 16) | (bytes[1] << 8) | (bytes[0]); }



(당연한것이지만, 가끔 망각 할때가 있어 기록함.)


Yamecoder 야매코더_
C++(일반) 2016.03.27 14:33

댓글을 달아 주세요

Powerd by Tistory, designed by criuce
rss