Converteer hex-tekenreeks naar int in Python

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 moet0specificeren 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 intsamen 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

intafleiden

Als u 0 als basis passeert, zal intde basis uit het voorvoegsel in de reeks afleiden.

>>> int(string_1, 0)
65535

Zonder het hexadecimale voorvoegsel, 0x, intheeft 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 ffffomdat 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

Other episodes