web-dev-qa-db-fra.com

convertir une chaîne en hexadécimal en python

J'ai un script qui appelle une fonction qui prend un nombre hexadécimal pour un argument. L'argument doit avoir le préfixe 0x. La source de données est une table de base de données et est stockée sous forme de chaîne, elle est donc renvoyée '0x77'. Je cherche un moyen de prendre la chaîne de la base de données et de l'utiliser comme argument sous forme hexadécimale avec le préfixe 0x.

Cela marche:

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

L'entrée de la base de données doit être une chaîne, car la plupart des autres enregistrements n'ont pas de valeurs hexadécimales dans cette colonne, mais les valeurs pourraient être modifiées pour le rendre plus facile, donc au lieu de '0x77', ce pourrait être '119'.

13
Edyoucaterself

Votre class.function Attend un entier qui peut être représenté par une décimale ou une hexadécimale littéral, de sorte que ces deux appels soient complètement équivalents:

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

Même print(0x77) affichera 119 (Car décimal est la représentation par défaut).

Donc, nous devrions plutôt parler de convertir une représentation sous forme de chaîne en entier. La chaîne peut être une représentation hexadécimale, comme '0x77', puis l'analyser avec le paramètre de base:

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

ou décimal, puis analysez-le comme int('119').

Pourtant, il est préférable de stocker un entier chaque fois que vous traitez avec des entiers.

EDIT: comme l'a suggéré @gnibbler, vous pouvez analyser en tant que int(x, 0), qui gère les deux formats.

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

Cela devrait fonctionner pour vous.

Vous pouvez également obtenir la représentation hexadécimale des caractères:

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

Je pense que vous dites que vous lisez une chaîne de la base de données et que vous souhaitez la convertir en un entier, si la chaîne a le préfixe 0x, vous pouvez la convertir comme suit:

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

Si ce n'est pas le cas:

>>> print int("119")
119
0
Guy Sirton