program story

파이썬에서 16 진수 문자열을 int로 변환

inputbox 2020. 9. 30. 10:39
반응형

파이썬에서 16 진수 문자열을 int로 변환


파이썬에서 16 진수 문자열을 정수로 어떻게 변환합니까?

" 0xffff"또는 " " 로 표시 할 수 있습니다 ffff.


0x 접두사가 없으면 기본을 명시 적으로 지정해야합니다. 그렇지 않으면 알 수있는 방법이 없습니다.

x = int("deadbeef", 16)

0x 접두사를 사용 하면 Python은 16 진수와 10 진수를 자동으로 구분할 수 있습니다.

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

( 이 접두사 추측 동작을 호출하려면 기본으로 지정 해야합니다0 . 두 번째 매개 변수를 생략하면 기본 10을 가정 함을 의미합니다.)


int(hexString, 16) 트릭을 수행하고 0x 접두사를 사용하거나 사용하지 않고 작동합니다.

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

주어진 문자열에 대해 :

int(s, 16)

파이썬에서 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

ffff파이썬은 대신 합법적 인 파이썬 이름을 쓰려고한다고 생각하기 때문에 이것은 작동하지 않습니다 .

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

Python 숫자는 숫자로 시작하는 반면 Python 이름은 숫자로 시작할 수 없습니다.


Adding to Dan's answer above: if you supply the int() function with a hex string, you will have to specify the base as 16 or it will not think you gave it a valid value. Specifying base 16 is unnecessary for hex numbers not contained in strings.

print int(0xdeadbeef) # valid

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

The worst way:

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

>>> hex_to_int("c0ffee")
12648430

Please don't do this!

Is using eval in Python a bad practice?


Or ast.literal_eval (this is safe, unlike eval):

ast.literal_eval("0xffff")

Demo:

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

The formatter option '%x' % seems to work in assignment statements as well for me. (Assuming Python 3.0 and later)

Example

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

If you are using the python interpreter, you can just type 0x(your hex value) and the interpreter will convert it automatically for you.

>>> 0xffff

65535

In Python 2.7, int('deadbeef',10) doesn't seem to work.

The following works for me:

>>a = int('deadbeef',16)
>>float(a)
3735928559.0

with '0x' prefix, you might also use eval function

For example

>>a='0xff'
>>eval(a)
255

참고URL : https://stackoverflow.com/questions/209513/convert-hex-string-to-int-in-python

반응형