사용하다 std::stringstream
unsigned int x;
std::stringstream ss;
ss << std::hex << "fffefffe";
ss >> x;
다음 예제는 -65538
결과로 생성 됩니다.
#include <sstream>
#include <iostream>
int main() {
unsigned int x;
std::stringstream ss;
ss << std::hex << "fffefffe";
ss >> x;
// output it as a signed type
std::cout << static_cast<int>(x) << std::endl;
}
새로운 C ++ 11 표준에는 사용할 수있는 몇 가지 새로운 유틸리티 기능이 있습니다! 특히 "문자열 대 숫자"기능 군 ( http://en.cppreference.com/w/cpp/string/basic_string/stol 및 http://en.cppreference.com/w/cpp/string/ basic_string / stoul ). 이들은 본질적으로 C의 문자열 대 숫자 변환 함수 주위의 얇은 래퍼이지만std::string
따라서 최신 코드에 대한 가장 간단한 답변은 다음과 같습니다.
std::string s = "0xfffefffe";
unsigned int x = std::stoul(s, nullptr, 16);
참고 : 아래는 원래 답변입니다. 편집 한 내용은 완전한 답변이 아닙니다. 기능 솔루션의 경우 코드를 :-) 줄 위에 붙여 넣으십시오.
이후 lexical_cast<>
스트림 변환 의미론을 갖도록 정의 된 것으로 보인다 . 슬프게도 스트림은 "0x"표기법을 이해하지 못합니다. 그래서 boost::lexical_cast
내 손으로 굴린 사람은 16 진수 줄을 잘 다루지 못합니다. 입력 스트림을 수동으로 16 진수로 설정하는 위의 솔루션은 잘 처리합니다.
Boost는이 작업 을 수행 할 수있는 몇 가지 사항 이 있으며 오류 검사 기능도 있습니다. 다음과 같이 사용할 수 있습니다.
try {
unsigned int x = lexical_cast<int>("0x0badc0de");
} catch(bad_lexical_cast &) {
// whatever you want to do...
}
부스트를 사용하고 싶지 않다면 오류 검사가없는 가벼운 어휘 캐스트 버전이 있습니다.
template<typename T2, typename T1>
inline T2 lexical_cast(const T1 &in) {
T2 out;
std::stringstream ss;
ss << in;
ss >> out;
return out;
}
다음과 같이 사용할 수 있습니다.
// though this needs the 0x prefix so it knows it is hex
unsigned int x = lexical_cast<unsigned int>("0xdeadbeef");