> 백엔드 개발 > C++ > C에서 16진수 문자열을 부호 있는 정수로 어떻게 변환할 수 있나요?

C에서 16진수 문자열을 부호 있는 정수로 어떻게 변환할 수 있나요?

Susan Sarandon
풀어 주다: 2024-12-28 13:03:12
원래의
505명이 탐색했습니다.

How Can I Convert a Hex String to a Signed Integer in C  ?

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

C에서 16진수 문자열을 부호 있는 정수로 변환해야 하는 경우가 많습니다. 예를 들어, 부호 있는 정수 -65538에 해당하는 11111111111111101111111111111110의 이진 값을 나타내는 "fffefffe"와 같은 16진수 문자열이 있을 수 있습니다.

std::stringstream을 사용한 솔루션

한 가지 접근 방식 이 변환을 수행하려면 std::stringstream:

unsigned int x;   
std::stringstream ss;
ss << std::hex << "fffefffe";
ss >> x;
로그인 후 복사

음수가 아닌 숫자

음수가 아닌 숫자를 처리하려면 다음 예를 사용할 수 있습니다.

#include <sstream>
#include <iostream>

int main() {
    unsigned int x;   
    std::stringstream ss;
    ss << std::hex << "0000000A";
    ss >> x;
    std::cout << static_cast<int>(x) << std::endl;
}
로그인 후 복사

결과적으로 10이 생성되며 이는 16진수 문자열에 적합합니다. "0000000A".

C 11 문자열-숫자 함수

C 11에서는 std::stoul과 같은 문자열-숫자 함수를 활용할 수 있습니다.

std::string s = "0xfffefffe";
unsigned int x = std::stoul(s, nullptr, 16);
로그인 후 복사

기타 접근 방식

또는 lexical_cast와 같은 기능을 제공하는 Boost와 같은 라이브러리를 활용할 수 있습니다.

unsigned int x = boost::lexical_cast<int>("0x0badc0de");
로그인 후 복사

나만의 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"); 
로그인 후 복사

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

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿