Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬으로 16진수 문자열을 10진수로 변환하는 방법

개요

이 글에서는 파이썬을 활용하여 16진수(hexadecimal) 문자열을 10진수 값으로 변환하는 방법을 자세히 알아봅니다.

문제 정의 − 16진수 형태의 문자열이 주어졌을 때, 이를 그에 대응하는 10진수 값으로 변환해야 합니다. 예를 들어 16진수 'F'는 10진수 15에 해당합니다.

이 문제는 크게 두 가지 접근 방식으로 해결할 수 있습니다.

  • 무차별 대입(Brute-force) 방식
  • 내장 모듈 활용 방식

방법 1: int() 함수를 이용한 변환

가장 직관적이고 널리 사용되는 방법은 파이썬의 기본 타입 변환 함수인 int()를 활용하는 것입니다. 이 함수는 두 개의 인자를 받습니다. 첫 번째는 변환할 16진수 문자열이고, 두 번째는 진수(base)를 의미하는 숫자로 여기서는 16을 지정합니다.

int() 함수는 16진수 문자열을 정수(int) 타입의 10진수 값으로 변환해주며, 필요에 따라 str() 함수를 사용해 다시 문자열 형태로 형변환할 수도 있습니다.

예제 코드

# 입력 문자열
string = 'F'

# 16진수 문자열을 10진수로 변환
res = int(string, 16)

# 결과 출력
print("16진수 문자열에 해당하는 10진수 값은 : " + str(res))

실행 결과

16진수 문자열에 해당하는 10진수 값은 : 15

위 코드에서 int('F', 16)은 문자열 'F'를 16진수로 해석하여 정수 15로 반환합니다. 공백 없이 깔끔하게 한 줄로 처리할 수 있어 실무에서도 가장 많이 사용되는 방식입니다.

방법 2: 내장 "ast" 모듈 활용하기

두 번째 방법은 표준 라이브러리인 ast(Abstract Syntax Tree) 모듈에서 제공하는 literal_eval() 함수를 사용하는 것입니다. 이 함수는 문자열로 표현된 파이썬 리터럴을 안전하게 평가(evaluate)하여 실제 파이썬 객체로 변환해 줍니다.

다만 이 방법을 사용하려면 입력 문자열에 '0x' 접두사가 반드시 포함되어 있어야 합니다. literal_eval()은 '0x' 접두사를 보고 해당 문자열이 16진수임을 판단한 후, 이를 10진수 값으로 변환합니다.

예제 코드

# 내장 모듈 literal_eval 사용
from ast import literal_eval

# 문자열 초기화 ('0x' 접두사 필수)
test_string = '0xF'

# 16진수 문자열을 10진수로 변환
res = literal_eval(test_string)

# 결과 출력
print("16진수 문자열의 10진수 값은 : " + str(res))

실행 결과

16진수 문자열의 10진수 값은 : 15

모든 변수는 지역 범위(local scope) 내에서 선언되며, 위 실행 화면에서 각 참조 값을 확인할 수 있습니다.

두 방법의 차이점 비교

  • int(문자열, 16): '0x' 접두사 유무와 관계없이 변환이 가능하며, 코드가 간결하고 성능 면에서도 유리합니다.
  • literal_eval(): '0x' 접두사가 반드시 필요하지만, 잘못된 리터럴 입력 시 안전하게 예외를 처리할 수 있다는 장점이 있습니다.

결론

이 글에서는 파이썬에서 주어진 16진수 문자열을 10진수 값으로 변환하는 두 가지 방법을 살펴보았습니다. 일반적인 경우에는 int() 함수를 사용하는 것이 가장 간단하고 효율적이며, 문자열 리터럴을 안전하게 평가해야 하는 상황이라면 ast 모듈의 literal_eval() 함수가 좋은 대안이 될 수 있습니다.