2014-02-10 15 views
11

Ich habe ein Skript, das eine Funktion aufruft, die eine Hexadezimalzahl für ein Argument verwendet. Das Argument muss das Präfix 0x haben. Die Datenquelle ist eine Datenbanktabelle und wird als Zeichenfolge gespeichert. Daher wird '0x77' zurückgegeben. Ich suche nach einer Möglichkeit, die Zeichenfolge aus der Datenbank zu nehmen und sie als ein Argument in Hex-Form mit dem Präfix 0x zu verwenden.konvertieren Zeichenfolge in Hexadezimal in Python

Dies funktioniert:

addr = 0x77 
value = class.function(addr) 

Die Datenbank-Eintrag hat eine Zeichenfolge sein, da die meisten anderen Datensätze in dieser Spalte keine hexadezimalen Werte haben, aber die Werte geändert werden könnten, um es einfacher zu machen, so anstelle von '0x77' könnte es '119' sein.

+0

'class.function (119)' und 'class.function (0x77)' sind vollständig äquivalente Aufrufe. – bereal

Antwort

10

Ihre class.function erwartet eine integer die durch eine Dezimalzahl oder eine Hexadezimalzahl literal repräsentiert entweder werden kann, so dass diese beiden Anrufe vollständig äquivalent sind:

class.function(0x77) 
class.function(119) # 0x77 == 119 

Selbst print(0x77)119 zeigen wird (weil decimal die Standarddarstellung ist) .

Also, wir sollten lieber über die Umwandlung einer String-Darstellung in Integer sprechen. Die Zeichenfolge kann eine hexadezimale Darstellung, wie ‚0x77‘ sein, parsen es dann mit dem Basisparameter:

>>> int('0x77', 16) 
119 

oder eine Dezimalzahl eine, parsen es dann als int('119').

Immer noch Speichern von Ganzzahl, wenn Sie mit Ganzzahlen umgehen, ist besser.

EDIT: wie @gnibbler vorgeschlagen, können Sie als int(x, 0) analysieren, die beide Formate behandelt.

+2

Wenn Sie '0' als zweiten Parameter zu' int' verwenden, werden sowohl dezimale als auch hexadezimale Werte korrekt konvertiert –

+0

@gnibbler einfach wow. Verdammt, das ist genau in der Dokumentation, und es ist das erste Mal, dass ich davon höre! – bereal

7
>>> hex(119) 
'0x77' 
#or: 
>>> hex(int("119")) 
'0x77' 

Dies sollte für Sie arbeiten.

Sie können auch die hexadezimale Darstellung von Zeichen erhalten:

>>> hex(ord("a")) 
'0x61' 
0

Ich glaube, Sie sagen, dass Sie eine Zeichenfolge aus der Datenbank gelesen und Sie wollen es auf eine ganze Zahl konvertieren, wenn die Zeichenfolge das hat 0x Präfix können Sie es wie so konvertieren:

>>> print int("0x77", 16) 
119 

Wenn es tut:

>>> print int("119") 
119 
Verwandte Themen