programing

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

randomtip 2022. 11. 1. 22:08
반응형

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

16진수 문자열을 정수로 변환하려면 어떻게 해야 하나요?

"0xffff"   ⟶   65535
"ffff"     ⟶   65535

미포함0xprefix, base를 명시적으로 지정해야 합니다.그렇지 않으면 다음 사항을 알 수 없습니다.

x = int("deadbeef", 16)

를 사용하여0xprefix, Python은 16진수와 10진수를 자동으로 구분할 수 있습니다.

>>> print(int("0xdeadbeef", 0))
3735928559
>>> print(int("10", 0))
10

(지정해야 합니다.0prefix-display 동작을 호출하기 위해 베이스로 사용됩니다.두 번째 파라미터를 생략하면는 base-10으로 간주됩니다).

int(hexstring, 16)는 다음 0x 프리픽스를 사용하거나 사용하지 않고 동작합니다.

>>> int("a", 16)
10
>>> int("0xa", 16)
10

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

라고 생각할 수 있다"0xffff"아니면 그냥"ffff".

문자열을 int로 변환하려면 문자열을 에 전달합니다.int변환원 베이스와 함께 사용할 수 있습니다.

두 문자열 모두 다음과 같이 변환하면 됩니다.

>>> string_1 = "0xffff"
>>> string_2 = "ffff"
>>> int(string_1, 16)
65535
>>> int(string_2, 16)
65535

내버려 두는int추론하다

0을 베이스로 하면int는 문자열의 프레픽스에서 베이스를 추론합니다.

>>> int(string_1, 0)
65535

16진수 프리픽스가 없으면0x,int에는 추측할 수 있는 충분한 정보가 없습니다.

>>> int(string_2, 0)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 0: 'ffff'

리터럴:

소스 코드나 인터프리터를 입력하는 경우는, Python이 변환을 실시합니다.

>>> integer = 0xffff
>>> integer
65535

와 함께 사용할 수 없습니다.ffffPython은 당신이 대신 합법적인 Python 이름을 쓰려고 한다고 생각할 것이기 때문입니다.

>>> integer = ffff
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'ffff' is not defined

Python 번호는 숫자로 시작하지만 Python 이름은 숫자로 시작할 수 없습니다.

임의의 문자열에 대해서:

int(s, 16)

위의 Dan 답변에 추가: int() 함수에 16진수 문자열을 지정할 경우 베이스를 16으로 지정해야 합니다.그렇지 않으면 유효한 값을 지정한 것으로 간주되지 않습니다.문자열에 포함되지 않은 16진수에는 16진수를 지정할 필요가 없다.

print int(0xdeadbeef) # valid

myHex = "0xdeadbeef"
print int(myHex) # invalid, raises ValueError
print int(myHex , 16) # valid

제발 이러지 마!

>>> def hex_to_int(x):
    return eval("0x" + x)

>>> hex_to_int("c0ffee")
12648430

왜 'eval'을 사용하는 것이 나쁜 관행일까요?

야생에서의 15000개 이상의 예.

또는ast.literal_eval(이것은 안전합니다.eval):

ast.literal_eval("0xffff")

데모:

>>> import ast
>>> ast.literal_eval("0xffff")
65535
>>> 

python interpreter를 사용하는 경우 0x(16진수 값)를 입력하면 자동으로 변환됩니다.

>>> 0xffff

65535

포메터 옵션 '%x' %는 할당문에서도 사용할 수 있는 것 같습니다.(Python 3.0 이후라고 가정)

a = int('0x100', 16)
print(a)   #256
print('%x' % a) #100
b = a
print(b) #256
c = '%x' % a
print(c) #100

16진수, 8진수, 2진수, int 및 float 처리

이 함수는 표준 접두사(0x, 0b, 0o 등)를 사용하여 적절한 문자열을 숫자로 변환합니다.https://stackoverflow.com/a/58997070/2464381 라고 대답했습니다만, 여기 필요한 기능이 있습니다.

def to_number(n):
    ''' Convert any number representation to a number 
    This covers: float, decimal, hex, and octal numbers.
    '''

    try:
        return int(str(n), 0)
    except:
        try:
            # python 3 doesn't accept "010" as a valid octal.  You must use the
            # '0o' prefix
            return int('0o' + n, 0)
        except:
            return float(n)

언급URL : https://stackoverflow.com/questions/209513/convert-hex-string-to-integer-in-python

반응형