Jak przekonwertować ciąg szesnastkowy na int w Pythonie?
Mogę to mieć jako „ 0xffff
” lub po prostu „ ffff
”.
Bez przedrostka 0x musisz jawnie określić bazę, w przeciwnym razie nie będzie można powiedzieć:
x = int("deadbeef", 16)
Za pomocą przedrostka 0x Python może automatycznie rozróżniać liczby szesnastkowe i dziesiętne.
>>> print int("0xdeadbeef", 0)
3735928559
>>> print int("10", 0)
10
(Ty musi określić 0
jako zasady w celu powołania tego prefiksu odgadnięcie zachowań; pomijając drugie środki parametrów założyć bazę-10).
int("FFFF",16)
przekonwertować na -1.int(hexString, 16)
wykonuje lewę i działa z prefiksem 0x i bez niego:źródło
Dla dowolnego podanego ciągu s:
źródło
Aby przekonwertować ciąg na liczbę int, przekaż ciąg
int
wraz z bazą, z której konwertujesz.Oba ciągi wystarczą do konwersji w ten sposób:
Pozwolić
int
wnioskowaćJeśli podasz 0 jako podstawę,
int
wyprowadzisz podstawę z przedrostka w ciągu.Bez prefiksu szesnastkowym
0x
,int
nie ma wystarczająco dużo informacji, z którym do odgadnięcia:literały:
Jeśli wpisujesz kod źródłowy lub interpreter, Python dokona dla Ciebie konwersji:
To nie zadziała,
ffff
ponieważ Python pomyśli, że zamiast tego próbujesz napisać prawidłową nazwę Python:Liczby w języku Python zaczynają się od znaku numerycznego, a nazwy w języku Python nie mogą zaczynać się od znaku numerycznego.
źródło
Dodając do powyższej odpowiedzi Dana: jeśli podasz funkcję int () ciągiem szesnastkowym, będziesz musiał określić bazę jako 16 lub nie będzie myśleć, że podałeś jej prawidłową wartość. Określenie podstawy 16 nie jest konieczne w przypadku liczb szesnastkowych nie zawartych w ciągach.
źródło
Najgorszy sposób:
Proszę nie rób tego!
Czy używanie eval w Pythonie jest złą praktyką?
źródło
eval
jest to również absurdalnie wolne, oprócz wszystkich innych problemów z tym związanych.int(s,16)
zwracaniem niewłaściwych wartości, powodując pewne poważne problemy z moim środowiskiem wykonawczym (int(hex(value),16) == int(value) >>> False
). podany ciąg znakóweval()
był bezpieczny, a zwrócona wartość była poprawna.Lub
ast.literal_eval
(w przeciwieństwie do tego jest bezpieczneeval
):Próbny:
źródło
Wydaje mi się, że opcja formatera „% x”% działa również w instrukcjach przypisania. (Zakładając, że Python 3.0 i nowszy)
Przykład
źródło
print(b)
będzie generować256
, nie100
iprint(c)
będzie generować100
, nie256
. Zauważ też, żec
jest to ciąg znaków, alea
nie jest tak, że twoja odpowiedź faktycznie przekształca liczbę całkowitą w ciąg, a nie na odwrót (o to chodzi w pytaniu).Jeśli używasz interpretera python, możesz po prostu wpisać 0x (wartość szesnastkową), a interpreter przekonwertuje go automatycznie.
źródło
Obsługuje hex, octal, binary, int i float
Korzystając ze standardowych prefiksów (tj. 0x, 0b, 0 i 0o), funkcja przekształci dowolny odpowiedni ciąg na liczbę. Odpowiedziałem na to tutaj: https://stackoverflow.com/a/58997070/2464381, ale tutaj jest potrzebna funkcja.
źródło
W Pythonie 2.7
int('deadbeef',10)
wydaje się nie działać.Poniższe działa dla mnie:
źródło
z prefiksem „0x” możesz także użyć funkcji eval
Na przykład
źródło
ast.literal_eval
.