답변:
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.