HOWTO · Python

Python에서 16 진수 문자열을 Int로 변환

파이썬에서 16 진수를 정수로 변환하는 방법을 보여줍니다.

이 페이지의 내용

Python에서 16진수 문자열을 정수로 변환하려면 int(value, 16)을 사용하세요. 0x 접두사를 Python이 감지하게 하려면 진법으로 0을 사용하고, 입력이 지정된 바이트 순서나 부호 있는 폭을 가진 바이트를 나타낸다면 int.from_bytes()를 사용하세요.

Python에서 int()로 16진수를 정수로 변환하기

int() 함수는 문자열과 선택적 진법을 받습니다. 기본 진법은 10이므로 16진수 텍스트에는 16을 전달하세요. int(value, base)에서 두 번째 인수는 입력 문자열의 진법을 뜻하며, 비트 폭이 아닙니다. 변환하려는 16진수 텍스트를 value 자리에 넣으면 됩니다.

접두사가 없는 16진수 문자열을 Python에서 정수로 변환하기

0x 또는 0X 접두사 없이 16진수 숫자만 있는 문자열에는 진법 16을 명시하세요. 텍스트 파일, API 또는 사용자 입력에서 읽은 값에 유용합니다.

hex_string = "1a"
integer_value = int(hex_string, 16)
print(integer_value)
26

결과는 26입니다. 진법 16은 int()가 각 숫자를 16진수로 해석하게 합니다. 문자열에 접두사가 있다면 진법 16을 사용하거나, 다음과 같이 int()가 접두사를 감지하도록 할 수 있습니다.

접두사가 있는 16진수 문자열을 Python에서 정수로 변환하기

접두사가 있는 16진수 텍스트에 진법 0을 지정하면 int()가 0x 또는 0X 같은 인식 가능한 접두사로 진법을 판단합니다. 진법 16도 이러한 접두사를 허용합니다. 입력에 다른 Python 정수 접두사가 사용될 수도 있다면 진법 0이 유용합니다.

hex_string = "0x1a"
integer_value = int(hex_string, 0)
print(integer_value)
26

문자열이 0x로 시작하므로 Python은 나머지 숫자를 16진수로 해석해 26을 반환합니다. 진법 0은 인식 가능한 접두사가 필요하며, 접두사가 없는 텍스트를 자동으로 16진수로 취급하지 않습니다. 입력에 접두사가 없다면 진법 16을 사용하세요.

Python에서 리틀 엔디안 및 빅 엔디안 바이트 순서로 16진수 문자열을 정수로 변환하기

리틀 엔디안과 빅 엔디안 바이트 순서는 바이트 시퀀스의 바이트가 정수에 대응하는 방식을 설명합니다. 16진수 텍스트 자체에는 기본 바이트 순서가 없습니다. 바이트가 ef be라면 빅 엔디안은 ef를 앞에 놓고, 리틀 엔디안은 ef를 최하위 바이트로 취급합니다. 원하는 순서를 int.from_bytes()에 전달하세요.

data = bytes.fromhex("ef be")
big_value = int.from_bytes(data, byteorder="big")
little_value = int.from_bytes(data, byteorder="little")
print(big_value, little_value)
61374 48879

bytes.fromhex()는 두 바이트로 이루어진 시퀀스를 만들고, byteorder는 그 바이트들이 결과에 반영되는 순서를 지정합니다. 빅 엔디안 결과는 61374, 리틀 엔디안 결과는 48879입니다. 이렇게 하면 16진수 문자열을 직접 뒤집지 않고도 바이트 순서를 명시할 수 있습니다.

Python에서 16진수를 부호 있는 정수로 변환하기

int("ffff", 16)처럼 일반적으로 변환하면 음수가 아닌 정수가 반환됩니다. 16진수 숫자를 부호 있는 값으로 해석하려면 바이트 폭을 정하고 signed=True로 바이트를 디코딩하세요. 16비트 값에서 ffff는 2의 보수 표현으로 -1을 나타냅니다.

hex_string = "ffff"
data = bytes.fromhex(hex_string)
signed_value = int.from_bytes(data, byteorder="big", signed=True)
print(signed_value)
-1

bytes.fromhex("ffff")는 두 바이트를 제공하므로, 이 부호 있는 변환의 폭은 16비트이며 결과는 -1입니다. 최상위 비트가 설정되어 있고 2의 보수로 부호 있는 값이 결정됩니다. 디코딩하는 데이터 형식에 맞춰 바이트 순서와 폭을 선택하세요. int() 자체는 둘 중 어느 것도 추론하지 않습니다.