2014-11-18 2 views
-3

다음 코드로 숫자를 16 진수로 변환하려고하는데 문제가 있습니다.이것을 정확히 어떻게 16 진수로 변환 할 수 있습니까?

int numconvert(string hexnum) 
{ 
stringstream converter(hexnum); 
unsigned int value = 0; 
converter >> hex >> value; 
return value; 
} 

string hexconvert(int hexnum) 
{ 
stringstream ss; 
ss << hex << hexnum; 

string n; 
ss >> n; 
return n; 
} 

는 I는 I가 그 칸으로 변경 및 문자열로 저장하기 hexconvert을 사용 int로 문자열의 입력을 변경할 numconvert를 사용한다.

모든 것이 잘 작동하는 것처럼 보입니다. 그러나 어떤 이유로 4096을 전달하면 4096이 다시 나타납니다. 1000을 예상했지만 왜 나에게 오류가 있는지 잘 모르겠습니다. 저는 4096을주고 16534의 int 값을 반환한다는 것을 알았습니다. 그리고 나서 프로그램은 그것을 16 진수 변환으로 보내고 4096을 돌려줍니다. 이것은 기술적으로 옳은 것이지, 제가 원한 것이 아닙니다.

다른 숫자를 잘 처리하는 것처럼 보입니다. 여기서 내가 뭘 잘못하고 있니?

+4

귀하의 질문에 명확하지 않습니다. "4096을 전달하십시오". 어떤 기능을 전달합니까? "int of 16534"를 반환한다면'numconvert ("4096"), 즉 (16 진수!) "4096"을 (십진수!) 16534로 변환한다고 가정합니다. 설계된대로 작동합니다. "프로그램이이를 16 진수 변환으로 보내면 4096을 반환합니다"라는 말이 맞습니다. 정확하게 (예 :'main()'을 추가하고 예제를 컴파일/재생 가능하게 만드는 것), 관찰 된 출력 및 예상 출력과 관련하여보다 정확히 말하십시오. 게다가'ss.str()'을 고려하십시오. – DevSolar

답변

2

거기에 논리 오류가 있다고 생각합니다. 당신이 작성하는 경우 :

int n = numconvert("4096"); 
std::string s = hexconvert(n); 

당신은 기본적으로 항상 반환하기 같은 이어질 것 다시 진수로 다시 번역, 당신은 numconvert 내부 converter >> hex >> value;을 얻었 기 때문에 이미 16 진수로 "4096"을 해석하도록 지시. 당신이 원하는 무엇

이 정상적인베이스 (10) 숫자로 "4096"을 해석 한 후 다시 hexconvert를 사용하여 16 진수 문자열로 그것을 변환합니다 아마

int n = std::stoi("4096"); 
std::string s = hexconvert(n); 

입니다. 당신이 numconvert 짧은 작성 및 아마 좀 더 효율적으로 너무 std::stoi을 사용할 수 있다고 말했다


, 그것은 기본적으로 그냥 우리가 nullptr의를 통과 할 수 있도록

int numconvert(const std::string& str) 
{ 
    return std::stoi(str, nullptr, 16); 
} 

우리가 두 번째 인수가 필요하지 않습니다 세 번째 인수가 기본입니다.

0

추출 연산자 대신 str 멤버를 사용하여 문자열 스트림에서 문자열을 추출해보십시오. 보다 직접적인 것 외에도 추출자가 어떻게 해석하는지에 대해 걱정할 필요가 없습니다.