Hoe converteer ik een hex-tekenreeks naar een int in Python?
Misschien heb ik het als “0xffff
” of gewoon “ffff
“.
Antwoord 1, autoriteit 100%
Zonderhet 0x-voorvoegsel, moet u de basis expliciet specificeren, anders is er geen manier om te vertellen:
x = int("deadbeef", 16)
Methet 0x-voorvoegsel kan Python automatisch hex en decimaal onderscheiden.
>>> print(int("0xdeadbeef", 0))
3735928559
>>> print(int("10", 0))
10
(U moet0
specificeren als de basis om dit prefix-guessing-gedrag op te roepen; als u de tweede parameter int()
gaat uit van basis-10.)
Antwoord 2, autoriteit 15%
int(hexstring, 16)
doet het, en werkt met en zonder het 0x-voorvoegsel:
>>> int("a", 16)
10
>>> int("0xa", 16)
10
Antwoord 3, autoriteit 4%
Converteer hex-tekenreeks naar int in Python
Misschien heb ik het als
"0xffff"
of gewoon"ffff"
.
Als je een tekenreeks wilt converteren naar een int, geef je de tekenreeks door aan int
samen met de basis waaruit je converteert.
Beide strings zijn op deze manier voldoende voor conversie:
>>> string_1 = "0xffff"
>>> string_2 = "ffff"
>>> int(string_1, 16)
65535
>>> int(string_2, 16)
65535
int
afleiden
Als u 0 als basis passeert, zal int
de basis uit het voorvoegsel in de reeks afleiden.
>>> int(string_1, 0)
65535
Zonder het hexadecimale voorvoegsel, 0x
, int
heeft niet genoeg informatie waarmee te raden:
>>> int(string_2, 0)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 0: 'ffff'
Letters:
Als u in de broncode of een tolk typt, maakt Python de conversie voor u:
>>> integer = 0xffff
>>> integer
65535
Dit werkt niet met ffff
omdat Python zal denken dat u in plaats daarvan een legitieme Python-naam probeert te schrijven:
>>> integer = ffff
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'ffff' is not defined
Python-nummers beginnen met een numeriek teken, terwijl Python-namen niet kunnen beginnen met een numeriek teken.
Antwoord 4, Autoriteit 4%
Voor elke gegeven string S:
int(s, 16)
Antwoord 5
Toevoegen aan het antwoord van Dan hierboven: Als u de INT () -functie met een HEX-string levert, moet u de basis opgeven als 16 of het zal niet denken dat u het een geldige waarde hebt gegeven. Specificeren van basis 16 is onnodig voor hex-nummers die niet in snaren zijn opgenomen.
print int(0xdeadbeef) # valid
myHex = "0xdeadbeef"
print int(myHex) # invalid, raises ValueError
print int(myHex , 16) # valid
Antwoord 6
De slechtste manier:
>>> def hex_to_int(x):
return eval("0x" + x)
>>> hex_to_int("c0ffee")
12648430
Doe dit alsjeblieft niet!
Is het gebruik van eval in Python een slechte gewoonte?
Antwoord 7
Of ast.literal_eval
(dit is veilig, in tegenstelling tot eval
):
ast.literal_eval("0xffff")
Demo:
>>> import ast
>>> ast.literal_eval("0xffff")
65535
>>>
Antwoord 8
De formatteroptie ‘%x’ % lijkt bij mij ook te werken in opdrachtverklaringen. (Uitgaande van Python 3.0 en hoger)
Voorbeeld
a = int('0x100', 16)
print(a) #256
print('%x' % a) #100
b = a
print(b) #256
c = '%x' % a
print(c) #100
Antwoord 9
Als u de python-interpreter gebruikt, typt u gewoon 0x (uw hexadecimale waarde) en de interpreter converteert het automatisch voor u.
>>> 0xffff
65535
Antwoord 10
Behandelt hex, octaal, binair, int en float
Met behulp van de standaard voorvoegsels (d.w.z. 0x, 0b, 0 en 0o) converteert deze functie elke geschikte tekenreeks naar een getal. Ik heb dit hier beantwoord: https://stackoverflow.com/a/58997070/2464381maar hier is de benodigde functie.
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)
Antwoord 11
In Python 2.7 lijkt int('deadbeef',10)
niet te werken.
Het volgende werkt voor mij:
>>a = int('deadbeef',16)
>>float(a)
3735928559.0
Antwoord 12
met het voorvoegsel ‘0x’ kunt u ook de eval-functie gebruiken
Bijvoorbeeld
>>a='0xff'
>>eval(a)
255