>백엔드 개발 >C++ >C에서 16진수 문자열을 부호 있는 정수로 변환하는 방법은 무엇입니까?

C에서 16진수 문자열을 부호 있는 정수로 변환하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-21 06:36:14453검색

How to Convert Hex Strings to Signed Integers in C  ?

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

숫자의 16진수 문자열 표현을 32비트 부호 있는 정수로 변환하는 작업을 생각해 보세요. 예를 들어, 16진수 문자열 "fffefffe"는 이진수 11111111111111101111111111111110으로 변환되어 부호 있는 정수 -65538을 나타냅니다. 또한 "0000000A"(이진수: 00000000000000000000000000001010; 십진수: 10)와 같은 양수와 음수를 모두 처리해야 합니다.

해결책: std::stringstream 활용

std 활용: :스트링스트림 클래스를 사용하면 변환 프로세스가 간단해집니다.

unsigned int x;
std::stringstream ss;
ss << std::hex << "fffefffe";
ss >> x;

스트림에서 정수를 추출하여 16진수 문자열의 32비트 부호 있는 정수 표현을 얻습니다.

대체 접근 방식

Boost의 lexical_cast: 오류 처리 (중단됨)

참고: 소스 답변에 표시된 대로 Boost의 lexical_cast 접근 방식은 최신 C 11 기능을 위해 중단되었습니다.

Boost는 또한 다음을 통합하는 편리한 솔루션을 제공합니다. 오류 확인:

try {
    unsigned int x = lexical_cast<int>("0x0badc0de");
} catch(bad_lexical_cast &amp;) {
    // Handle conversion error
}

사용자 정의 lexical_cast: 없이 간단한 구현 오류 검사

Boost를 사용하지 않는 경우 오류 처리 없이 lexical_cast의 단순화된 버전을 사용할 수 있습니다.

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

unsigned int x = lexical_cast<unsigned int>("0xdeadbeef");

결론

두 가지 표준 사용:: stringstream 또는 최신 C 11 유틸리티(예: std::stol)를 사용하면 개발자는 16진수 문자열을 부호 있는 문자열로 효율적으로 변환할 수 있습니다. C의 정수 .

위 내용은 C에서 16진수 문자열을 부호 있는 정수로 변환하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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