Konwertuj łańcuch szesnastkowy na int w Pythonie

Jak przekonwertować łańcuch szesnastkowy na int w Pythonie?

Mogę mieć to jako "0xffff" lub po prostu "ffff".

Author: Aaron Hall, 2008-10-16

9 answers

Bez prefiksu 0x, musisz wyraźnie określić bazę, w przeciwnym razie nie ma sposobu, aby powiedzieć:

x = int("deadbeef", 16)

Dzięki prefiksowi 0x, Python może automatycznie rozróżniać hex i decimal.

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

(ty musisz określić 0 jako bazę w celu wywołania tego zachowania zgadywania przedrostków; pominięcie drugiego parametru oznacza założenie bazy-10.)

 845
Author: Dan Lenski,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-12 00:21:19

int(hexString, 16) działa z prefiksem 0x i bez niego:

>>> int("a", 16)
10
>>> int("0xa",16)
10
 131
Author: unwind,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-08 04:37:23

Dla dowolnego ciągu S:

int(s, 16)
 40
Author: Jorge Ferreira,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-16 17:32:32

Konwertuj łańcuch szesnastkowy na int w Pythonie

Mogę mieć to jako "0xffff" lub po prostu "ffff".

Aby przekonwertować łańcuch znaków na int, przekaż łańcuch do int wraz z bazą, z której konwertujesz.

Oba łańcuchy wystarczą do konwersji w ten sposób:

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

Letting int infer

Jeśli podasz 0 jako bazę, int wywnioskuje bazę z prefiksu w łańcuchu.

>>> int(string_1, 0)
65535

Bez przedrostka szesnastkowego, 0x, int nie ma wystarczającej ilości informacji, z którymi można się domyślić:

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

Literały:

Jeśli wpisujesz kod źródłowy lub interpreter, Python dokona konwersji za Ciebie:

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

To nie zadziała z ffff ponieważ Python pomyśli, że próbujesz zamiast tego napisać poprawną nazwę Pythona:

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

Liczby Pythona zaczynają się od znaku numerycznego, podczas gdy nazwy Pythona nie mogą zaczynać się od znaku numerycznego.

 21
Author: Aaron Hall,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-14 02:50:29

Dodanie do powyższej odpowiedzi dana: jeśli podasz funkcję int () z łańcuchem szesnastkowym, będziesz musiał podać bazę jako 16, lub nie pomyśli, że podałeś jej prawidłową wartość. Podanie bazy 16 jest niepotrzebne dla liczb szesnastkowych Nie zawartych w łańcuchach.

print int(0xdeadbeef) # valid

myHex = "0xdeadbeef"
print int(myHex) # invalid, raises ValueError
print int(myHex , 16) # valid
 11
Author: Max,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-30 16:43:03

Najgorszy sposób:

>>> def hex_to_int(x):
    return eval("0x" + x)

>>> hex_to_int("c0ffee")
12648430

Proszę, nie rób tego!

Czy używanie eval w Pythonie jest złą praktyką?

 3
Author: André Laszlo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:02:58

W Pythonie 2.7, int('deadbeef',10) nie działa.

Dla mnie działa:

>>a = int('deadbeef',16)
>>float(a)
3735928559.0
 1
Author: Avi2503,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-16 00:41:46

Opcja formatowania '% x ' % wydaje się działać również w poleceniach przypisania. (Przy założeniu Pythona 3.0 i nowszych)

Przykład

a = int('0x100', 16)
print(a)   #256
print('%x' % a) #100
b = a
print(b) #256
c = '%x' % a
print(c) #100
 1
Author: Soundararajan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-10 09:38:19

Z prefiksem '0x' można również użyć funkcji eval

Na przykład

>>a='0xff'
>>eval(a)
255
 -3
Author: Junjie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-21 06:39:36