Convertir entier de hex-string avec un format spécifique
Je suis nouveau sur le python et ont le problème suivant: j'ai besoin de convertir un entier en une chaîne hexadécimale avec 6 octets.
par exemple
281473900746245 --> "\xFF\xFF\xBF\xDE\x16\x05"
Le format de l'hex-string est important. La longueur de l'int valeur est variable.
Le format "0xffffbf949309L" ne fonctionne pas pour moi. (Je l'obtenir avec hex(int valeur))
Mon solution finale (après un certain "jeu") est:
def _tohex(self, int_value):
data_ = format(int_value, 'x')
result = data_.rjust(12, '0')
hexed = unhexlify(result)
return hexed
Je vous remercie pour toute l'aide!
Voulez-vous la chaîne de caractères de longueur 6 défini par le Python littéral de chaîne
Les termes "chaîne hexadécimale" et "format" sont trompeuses, ce que vous voulez vraiment est de former un nombre entier de taille arbitraire à une chaîne d'octets avec big-endian commande.
Veuillez excusez mon anglais, j'ai juste traduit les termes de ma première langue, merci pour la traduction.
"\xFF\xFF\xBF\xDE\x16\x05"
ou la chaîne de caractères de longueur 24 donnés par "\\xFF\\xFF\\xBF\\xDE\\x16\\x05"
?Les termes "chaîne hexadécimale" et "format" sont trompeuses, ce que vous voulez vraiment est de former un nombre entier de taille arbitraire à une chaîne d'octets avec big-endian commande.
Veuillez excusez mon anglais, j'ai juste traduit les termes de ma première langue, merci pour la traduction.
OriginalL'auteur Oxymoron | 2011-07-29
Vous devez vous connecter pour publier un commentaire.
Il pourrait y avoir une meilleure solution, mais vous pouvez le faire:
Ventilation:
Mise à jour:
Par @multipleinstances et @Sven commentaires, car vous pourriez être aux prises avec des valeurs longues, vous pourriez avoir à modifier la sortie de l'hexagone un peu:
Parfois, cependant, la sortie de l'hexagone pourrait être d'une longueur impaire, qui enfreindrait les décoder, de sorte qu'il serait probablement préférable de créer une fonction pour ce faire:
hex(x)[2:]
produitffffbfde1605L
, ce qui provoque uneTypeError
à décoder.hex(x)[2:-1]
peut-être mieux.sans condition de décapage le dernier octet est une mauvaise idée.
hex(x)[2:].rstrip("L")
devrait faire le travail, cependant.En fait, cela ne fonctionne pas pour L valeurs depuis l'hex de sortie peut être une longueur impaire (pour certaines raisons).
Voir ma réponse --
zfill
.Pour vous sauver de la dispute avec
0x
préfixe etL
suffixe, utilisezformat(number, 'x')
au lieu dehex()
.OriginalL'auteur Manny D
En Python 3.2 ou supérieur, vous pouvez utiliser le
to_bytes()
méthode de l'entier.math.log
ouint.bit_length
) et probablement souhaitez spécifierbyteorder='big'
.Merci, élargi ma réponse.
OriginalL'auteur Sven Marnach
Si vous n'utilisez pas de Python 3.2 (je suis sûr que vous ne le font pas), considérer l'approche suivante:
OriginalL'auteur Roman Bodnarchuk