>백엔드 개발 >C++ >C에서 16진수 문자열을 부호 있는 정수로 효율적으로 변환하려면 어떻게 해야 합니까?

C에서 16진수 문자열을 부호 있는 정수로 효율적으로 변환하려면 어떻게 해야 합니까?

Patricia Arquette
Patricia Arquette원래의
2024-12-30 18:27:10150검색

How Can I Efficiently Convert Hexadecimal Strings to Signed Integers in C  ?

C에서 16진수 문자열을 부호 있는 정수로 변환

16진수 문자열을 부호 있는 정수로 변환하는 것은 프로그래밍에서 일반적인 작업입니다. C에서는 다양한 방법을 사용하여 이 변환을 효율적으로 수행할 수 있습니다.

한 가지 방법은 std::stringstream을 사용하는 것입니다. 이 접근 방식을 사용하면 16진수 문자열을 스트림으로 구문 분석하고 이를 이진 형식으로 표시되는 부호 없는 정수로 변환할 수 있습니다. 양수 및 음수 부호 있는 정수를 모두 처리하려면 static_cast를 사용하여 결과를 부호 있는 유형으로 명시적으로 캐스팅할 수 있습니다.

unsigned int x;
std::stringstream ss;
ss << std::hex << "fffefffe";
ss >> x;
std::cout << static_cast<int>(x) << std::endl; // Output: -65538

최신 C 11 표준에서는 "문자열을 사용하여 숫자를 지정할 수 있습니다. " 이를 간소화하기 위한 std::stoul과 같은 변환 함수 process:

std::string s = "0xfffefffe";
unsigned int x = std::stoul(s, nullptr, 16);
std::cout << x << std::endl; // Output: 4294967022

참고: 위의 해결 방법을 사용하려면 입력 16진수 문자열이 16진수임을 나타내기 위해 "0x" 접두사로 형식을 지정해야 합니다.

또 다른 방법 Boost 라이브러리를 사용하는 것과 관련이 있습니다. Boost는 16진수에서 정수로의 변환을 원활하게 처리하는 Boost::lexical_cast와 같은 유틸리티를 제공합니다.

try {
    unsigned int x = boost::lexical_cast<unsigned int>("0xdeadbeef");
} catch (boost::bad_lexical_cast &) {
    // Handle error scenario
}

오류 검사가 없는 경량 버전의 lexical_cast의 경우 다음과 같이 구현할 수 있습니다.

template<typename T2, typename T1>
inline T2 lexical_cast(const T1& in) {
    T2 out;
    std::stringstream ss;
    ss << in;
    ss >> out;
    return out;
}

이 함수를 사용하면 "0x"가 없는 16진수 문자열을 변환할 수 있습니다. prefix:

unsigned int x = lexical_cast<unsigned int>("deadbeef");

이러한 방법을 이해하면 다양한 사용 사례에 대해 C에서 16진수 문자열을 부호 있는 정수로 효과적으로 변환하여 정확하고 안정적인 데이터 변환을 보장할 수 있습니다.

위 내용은 C에서 16진수 문자열을 부호 있는 정수로 효율적으로 변환하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.