문제
육각 문자열을 파이썬의 int로 어떻게 변환합니까?
나는 그것을 "로 가질 수있다"0xffff
"또는 그냥"ffff
".
해결책
없이 0x 접두사는 기본을 명시 적으로 지정해야합니다. 그렇지 않으면 말할 방법이 없습니다.
x = int("deadbeef", 16)
와 함께 0x 접두사, 파이썬은 16 진수와 소수점을 자동으로 구별 할 수 있습니다.
>>> print int("0xdeadbeef", 0)
3735928559
>>> print int("10", 0)
10
(너 ~ 해야 하다 지정하십시오 0
이 접두사 추측 동작을 호출하기위한 기본으로서; 두 번째 매개 변수를 생략한다는 것은 Base-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
Python은 대신 합법적 인 Python 이름을 쓰려고한다고 생각할 것이기 때문입니다.
>>> integer = ffff
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'ffff' is not defined
파이썬 번호는 숫자 문자로 시작하는 반면, 파이썬 이름은 숫자 문자로 시작할 수 없습니다.
위의 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
제발 이렇게하지 마십시오!
또는 ast.literal_eval
(이것은 안전합니다 eval
):
ast.literal_eval("0xffff")
데모:
>>> import ast
>>> ast.literal_eval("0xffff")
65535
>>>
Python 2.7에서 int('deadbeef',10)
작동하지 않는 것 같습니다.
다음은 저를 위해 작동합니다.
>>a = int('deadbeef',16)
>>float(a)
3735928559.0
Formatter 옵션 ' % x' %는 나에게도 과제 진술에서도 작동하는 것 같습니다. (파이썬 3.0 이상 가정)
예시
a = int('0x100', 16)
print(a) #256
print('%x' % a) #100
b = a
print(b) #256
c = '%x' % a
print(c) #100
Python 통역사를 사용하는 경우 0x (16 진수)를 입력 할 수 있으며 통역사가 자동으로 변환됩니다.
>>> 0xffff
65535
'0x'접두사를 사용하면 Eval Function을 사용할 수도 있습니다.
예를 들어
>>a='0xff'
>>eval(a)
255