Chaîne hexadécimale à signé int en Python 3.2?
Comment puis-je convertir une chaîne hexadécimale de la signature d'un int en Python 3.2?
Du mieux que je peux venir avec est
h = '9DA92DAB'
b = bytes(h, 'utf-8')
ba = binascii.a2b_hex(b)
print(int.from_bytes(ba, byteorder='big', signed=True))
Est-il un moyen plus simple? Non signé est tellement plus facile: int(h, 16)
BTW, l'origine de la question est itunes identifiant persistant - la musique de la bibliothèque xml version et iTunes hex version
Les deux lignes b= et ba= peut être remplacé par ba=octets.fromhex(h). Voir Lennart commentaire ci-dessous.
OriginalL'auteur foosion | 2011-07-18
Vous devez vous connecter pour publier un commentaire.
Bon, je déteste taper le code sur un iPad. Peut pas être exécuté pour vérifier.
Gardant cela à l'esprit sans l'exécuter (ou d'avoir de meilleurs google compétences que je n') est bonne
OriginalL'auteur Mark Tolonen
Pour Python 3 (avec les commentaires de l'aide):
Pour Python 2:
ou si elle est en little endian:
N'ont pas de Python 3 pour tester cela, mais en se fondant sur la documentation
struct.unpack('>i', bytes('9DA92DAB', 'utf-8'))
devrait fonctionner.Il n'a pas. h.decode('hex') et d'octets(h, 'utf8') faire des choses complètement différentes. Vous souhaitez octets.fromhex(h).
Mon mauvais. Signifiait
struct.unpack('>i', bytes('9DA92DAB', 'utf-8').decode('hex'))
. Mais ça devient ridiculement longue de toute façon, et la demande a été pour quelque chose de plus simple. Et c'est aussi ne pas sur Python 3... Meh pour enlever les 'hex'.En utilisant des encodages Unicode pour l'encodage hexadécimal est illogique et sujettes à la rupture.
OriginalL'auteur kichik
Voici une fonction que vous pouvez utiliser pour hex de toute taille:
Et de l'utiliser:
OriginalL'auteur justsomedude
C'est un très tardive réponse, mais voici une fonction pour faire la-dessus. Cela permet de prolonger pour n'importe quelle longueur que vous fournissez. De crédit pour des parties de cet autre, de SORTE de réponse (j'ai perdu le lien, donc merci de nous la fournir si vous le trouvez).
OriginalL'auteur Joe Marley
Cela fonctionne pour les 16 bits signé ints, vous pouvez étendre de 32 bits entiers. Il utilise la définition de base de 2 en complément des nombres signés. noter Également xor avec 1 est la même chose qu'un binaire nier.
OriginalL'auteur amarchiori