2014-10-11 3 views
0

int 입력 바이너리를 인쇄하는 함수가 있습니다. 완벽하게C++ 16 진수 Int Stringstream 사용하여

int num = 0; 
    stringstream << "0xabcd123"; 
    stringstream >> num; //num becomes the decimal representation of the above hex. 
    outputBinary(num); 

작품 : 나는 문자열 형태의 진수가있을 때

, 내가 사용하는 함수를 호출합니다. 그러나

에 "NUM"16 진수 문자열로 변환 할 때

int num = 0; 
    stringstream << "0xabcd1234"; //fully filled hex value. 
    stringstream >> num; //num remains at 0. 
    outputBinary(num); 

그것이 완전히 채워진 16 진수 값 원인 이제 stringstream 오버 플로우 것을 할 수 있을까요?

+0

두 개의 코드 스 니펫은 동일합니다 (그리고 아마도'outputBinary' 두 개를 보여줄 수 없습니다) – quantdev

+0

시도 됨'unsigned num; stringstream >> num;'? –

답변

3

값이 범위를 벗어났습니다. 표준에 따르면 문자열은 strtoll을 사용하여 구문 분석됩니다 ... 값이 long long에 적합하고 양수로 해석됩니다. 그런 다음 제공된 유형 (int)에 맞는지 여부를 확인합니다. 그러나 컴파일러가 32 비트 int을 가지고 있다고 가정 할 때, 그렇지 않습니다. 리터럴이 형식 unsigned int 주어지고, signed int에 암시 적 변환 구현 정의 행동의 결과 범위를 벗어되기 때문에

소스 코드에서

int num = 0xabcd1234; 

를 작성하는 것은 문제가 물론있을 것이다.