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

Rayven Esplanada 2023년10월10일
  1. Python에서int()를 사용하여 Hex를 Int로 변환
  2. Python에서 접두사가없는 16 진수 문자열을 Int로 변환
  3. Python에서 접두사 16 진수 문자열을 Int로 변환
  4. Python에서 Little 및 Big Endian 16 진수 문자열을 Int로 변환
  5. Hex를 Python에서 부호있는 정수로 변환
Python에서 16 진수 문자열을 Int로 변환

이 튜토리얼은 파이썬에서 16 진수 문자열을int로 변환하는 방법을 보여줍니다. 부호, 리틀, 빅 엔디안, 주석 처리된 16진수 0x, 기본 16 진수 문자열과 같은 다양한 16 진수 형식을 다룹니다.

Python에서int()를 사용하여 Hex를 Int로 변환

파이썬에서 16 진수를 정수로 변환하는 가장 일반적이고 효과적인 방법은 타입 캐스팅 함수int()를 사용하는 것입니다.

이 함수는 두 개의 인수를받습니다. 하나는 변환 할 값인 필수 인수이고 다른 하나는 기본값이 10인 숫자 형식의 기반 인 두 번째 선택적 인수입니다.

다른 숫자 형식은 바이너리의 경우 2, 8 진수의 경우 8, 16 진수의 경우 16입니다. 기본 값에 대한 인수로 0을 넣으면 값의 접두사에서 숫자 형식이 파생됩니다. 접두사가 없으면 자동으로 10 진수로 인식하고 2 진수는 0b, 8 진수는 0o, 16 진수는 0x로 인식합니다.

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

16 진수 문자열이 접두사로 지정되지 않은 경우int()함수의 기본 값을 16으로 지정합니다.

예를 들면 :

hex_val = "beef101"

print(int(hex_val, 16))

출력:

200208641

결과는 16 진수 값 beef101의 10 진수 또는 정수 변환입니다.

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

16 진수 문자열에 접두사 0x가있는 경우 기본 값 인수를 0으로 변경하여 접두사를 자동으로 감지합니다.

여전히 16을 기본으로 전달할 수 있지만 다른 숫자 형식으로 여러 값을 처리하는 경우 0을 전달하는 것이 가장 좋은 방법입니다.

hex_val = "0xdeadcab"

print(int(hex_val, 0))
print(int(hex_val, 16))

출력:

233495723
233495723

Python에서 Little 및 Big Endian 16 진수 문자열을 Int로 변환

리틀 엔디안 및 빅 엔디안 바이트 주문은 16 진수에 대한 두 가지 유형의 주문 시스템입니다. 기본 순서는 little-endian으로, 시퀀스의 가장 오른쪽 부분에 최상위 숫자를 배치하는 반면 big-endian은 그 반대입니다.

이를 염두에두고 우리가 고려해야 할 것은 빅 엔디안 16 진수 값을 리틀 엔디안으로 변환하는 것입니다. 그 후, 이제 일반적인 변환을 수행 할 수 있습니다.

빅 엔디안 16 진수 문자열을 리틀 엔디안 문자열로 변환하려면bytearray.fromhex()를 사용하고 결과에reverse()함수를 사용하세요. 그런 다음 16 진수 값을 다시 문자열로 변환하고 정수로 변환합니다.

big_endian = "efbe"


def to_little(val):
    little_hex = bytearray.fromhex(val)
    little_hex.reverse()
    print("Byte array format:", little_hex)

    str_little = "".join(format(x, "02x") for x in little_hex)

    return str_little


little_endian = to_little(big_endian)

print("Little endian hex:", little_endian)
print("Hex to int:", int(little_endian, 16))

이 코드 블록을 요약하려면 :

  • bytearray.fromhex()를 호출하여 빅 엔디안 16 진수 문자열을 바이트 배열 16 진수 값으로 변환합니다.
  • 바이트 배열을 반전하여 빅 엔디안을 리틀 엔디안 형식으로 변환합니다.
  • 바이트 배열 값을 little-endian의 16 진 문자열 형식으로 다시 변환합니다.
  • int()를 사용하여 문자열을 정수로 변환합니다.

출력:

Byte array format: bytearray(b'\xbe\xef')
Little endian hex: beef
Hex to int: 48879

Hex를 Python에서 부호있는 정수로 변환

모든 숫자 형식을 부호있는 정수로 변환하려면 2의 보수라는 연산이 필요합니다. 부호있는 숫자를 계산합니다.

따라서 16 진수를 부호있는 정수로 변환하기 전에 2의 보수 연산을 수행 할 함수를 정의해야합니다.

def twosComplement_hex(hexval):
    bits = 16  # Number of bits in a hexadecimal number format
    val = int(hexval, bits)
    if val & (1 << (bits - 1)):
        val -= 1 << bits
    return val

이진 값의 가장 왼쪽 비트를 부호있는 비트라고하며 정수가 양수인지 음수인지 결정합니다. 이 함수는 해당 비트를 부호있는 비트로 예약하고 비트 왼쪽 시프트 연산자<<를 사용하여 보상하기 위해 다른 비트를 시프트합니다.

이제 16 진수 값을 signed int로 실제 변환하는 방법으로 이동합니다.

hex_val1 = "ff"
hex_val2 = "ffff"
hex_val3 = "aaff"


def twosComplement_hex(hexval):
    bits = 16
    val = int(hexval, bits)
    if val & (1 << (bits - 1)):
        val -= 1 << bits
    return val


print(twosComplement_hex(hex_val1))
print(twosComplement_hex(hex_val2))
print(twosComplement_hex(hex_val3))

출력:

255
-1
-21761

이제 16 진 문자열을 부호있는 정수로 변환했습니다.

요약하면 다양한 유형의 16 진수 형식을 부호있는 정수와 부호없는 정수로 변환하는 방법을 다뤘습니다. 16 진수를 부호없는 정수로 변환하려면 값 및 기본 인수와 함께int()를 사용하세요.

16 진수가 빅 엔디안 형식 인 경우 먼저bytearray.fromhex()reverse()를 사용하여 리틀 엔디안 형식으로 변환합니다.

마지막으로 16 진수 문자열을 부호있는 정수로 변환해야하는 경우 16 진수 값에 대해 2의 보수 연산을 수행하여 부호있는 정수 값을 얻습니다.

Rayven Esplanada avatar Rayven Esplanada avatar

Skilled in Python, Java, Spring Boot, AngularJS, and Agile Methodologies. Strong engineering professional with a passion for development and always seeking opportunities for personal and career growth. A Technical Writer writing about comprehensive how-to articles, environment set-ups, and technical walkthroughs. Specializes in writing Python, Java, Spring, and SQL articles.

LinkedIn

관련 문장 - Python Hex

관련 문장 - Python Integer