Konverter heksestreng til int i Python

Convert Hex String Int Python



hvordan Python Å konvertere heksadesimal streng til int?

Jeg kan sette den til '0xffff 'Eller' ffff ”。




#1. etasje

Legg til Dans svar ovenfor: Hvis en heksadesimal streng er gitt for int () -funksjonen, må radiksen spesifiseres som 16, ellers vil den ikke anta at du ga den en gyldig verdi. For heksadesimale sifre som ikke er inkludert i strengen, trenger du ikke å spesifisere basen 16.



print int(0xdeadbeef) # valid my Hex = '0xdeadbeef' print int(myHex) # invalid, raises ValueError print int(myHex , 16) # valid

#2. etasje

Med prefikset '0x' kan du også bruke eval-funksjonen



F.eks

>>a='0xff' >>eval(a) 255

#3 etasje

Formateringsalternativet '% x'% ser også ut til å bli brukt i oppgaveuttalelser. (Forutsatt at Python 3.0 og høyere)

eksempel



a = int('0x100', 16) print(a) #256 print('%x' % a) #100 b = a print(b) #256 c = '%x' % a print(c) #100

# 4. etasje

int(hex String , 16) Problemet kan løses, og prefikset 0x kan brukes og ikke brukes:

>>> int('a', 16) 10 >>> int('0xa',16) 10

# 5. etasje

For en gitt streng s:

int(s, 16)

# 6. etasje

hvis det ikke er det 0x prefiks, du må spesifisere kardinaliteten eksplisitt, ellers kan du ikke fortelle:

x = int('deadbeef', 16)

bruk 0x prefiks, kan Python automatisk skille mellom heksadesimal og desimal.

>>> print int('0xdeadbeef', 0) 3735928559 >>> print int('10', 0) 10

(du vil 0 Spesifiser kardinaliteten for å påkalle denne prefikset gjetningsadferd som utelater den andre parameteren, betyr at kardinaliteten antas å være 10.)


# 7. etasje

Den verste måten:

>>> def hex_to_int(x): return eval('0x' + x) >>> hex_to_int('c0ffee') 12648430

Jeg kan endre det '0xffff' for '0xffff' Eller bare 'ffff' .

For å konvertere en streng til en int, send strengen til basen som skal konverteres til int .

Begge strengene kan konverteres på følgende måter:

>>> string_1 = '0xffff' >>> string_2 = 'ffff' >>> int(string_1, 16) 65535 >>> int(string_2, 16) 65535

La int Slutte

Hvis du passerer 0 som base, vil int Kardinaliteten utledes fra prefikset i strengen.

>>> int(string_1, 0) 65535

Hvis det ikke er noe heksadesimalt prefiks 0x , da int Det er ikke nok informasjon til å gjette:

>>> int(string_2, 0) Traceback (most recent call last): File '', line 1, in ValueError: invalid literal for int() with base 0: 'ffff'

Tekst:

Hvis du vil angi kildekoden eller tolken, vil Python konvertere den for deg:

>>> integer = 0xffff >>> integer 65535

Dette gjelder ikke ffff Fordi Python vil tro at du prøver å skrive et lovlig Python-navn:

>>> integer = ffff Traceback (most recent call last): File '', line 1, in NameError: name 'ffff' is not defined

Python-tall begynner med numeriske tegn, og Python-navn kan ikke begynne med numeriske tegn.


# 10. etasje

eller ast.literal_eval (Dette er trygt, og eval Forskjellig):

ast.literal_eval('0xffff')

Demo:

>>> import ast >>> ast.literal_eval('0xffff') 65535 >>>

# 11Gulv

Hvis du bruker en pythontolker, skriv bare 0x (din hex-verdi), så tolker den automatisk konvertering for deg.

>>> 0xffff 65535

# 12 etasje

Håndterer heksadesimale, oktale, binære, heltall og flytende tall

Ved å bruke standard prefikser (dvs. 0x, 0b, 0 og 0o), vil denne funksjonen konvertere en hvilken som helst streng til et tall. Jeg svarte på dette spørsmålet her: https : //stackoverflow.com/a/58997070/2464381 , Men dette er en nødvendig funksjon.

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)