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'.
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.
>>> 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'
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