답변:
0x 접두사가 없으면 명시 적으로 밑을 지정해야합니다. 그렇지 않으면 말할 방법이 없습니다.
x = int("deadbeef", 16)
0x 접두사를 사용 하면 Python은 16 진수와 10 진수를 자동으로 구별 할 수 있습니다.
>>> print int("0xdeadbeef", 0)
3735928559
>>> print int("10", 0)
10
(사용자가 해야 지정 0
이 접두어 추측 동작을 호출하기 위해, 상기베이스로,베이스 (10)를지지하는 제 파라미터 수단 생략).
int("FFFF",16)
-1로 변환 하고 싶습니다 .
파이썬에서 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'
소스 코드 나 인터프리터를 입력하면 파이썬이 다음과 같이 변환합니다.
>>> integer = 0xffff
>>> integer
65535
ffff
파이썬은 합법적 인 파이썬 이름을 쓰려고한다고 생각하기 때문에 작동하지 않습니다 .
>>> integer = ffff
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'ffff' is not defined
파이썬 숫자는 숫자로 시작하지만 파이썬 이름은 숫자로 시작할 수 없습니다.
최악의 방법 :
>>> def hex_to_int(x):
return eval("0x" + x)
>>> hex_to_int("c0ffee")
12648430
eval
과 관련된 다른 모든 문제들보다 터무니없이 느리다는 점도 주목할 가치 가 있습니다.
int(s,16)
부적절한 값 을 반환하는 문제가 발생하여 런타임에 중요한 문제를 일으킨 후에이 작업을 수행했음을 유의해야 합니다 ( int(hex(value),16) == int(value) >>> False
). 제공된 문자열 eval()
은 안전하고 반환 된 값이 적절했습니다.
포맷터 옵션 '% 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
print(b)
가 출력 256
하지 100
와 print(c)
의지를 출력 100
하지 256
. 또한 c
문자열이지만 a
그렇지 않으므로 대답은 실제로 int를 문자열로 변환 하지만 다른 방법은 아닙니다 (이것은 질문에 관한 것입니다).
파이썬 인터프리터를 사용하는 경우 0x (16 진수 값)를 입력하면 인터프리터가 자동으로 변환합니다.
>>> 0xffff
65535
16 진, 8 진, 2 진, int 및 부동 소수점 처리
표준 접두사 (예 : 0x, 0b, 0 및 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)
'0x'접두사로 eval 함수를 사용할 수도 있습니다
예를 들어
>>a='0xff'
>>eval(a)
255
ast.literal_eval
.