La meilleure façon de diviser les hexadécimale en python?
Je suis assez nouveau à l'hexadécimal en général, et j'ai une application qui a besoin de moi pour diviser un nombre hexadécimal. Par exemple, étant donné le nombre 0x607F, j'aurais besoin de retourner le haut (0x60) ou faible (0x7F) octet.
C'est la mise en œuvre, il se sent un peu cloogy bien. Est-il plus standard de la manière de le faire en python?
def byte(integer,highlow):
assert highlow=='high' or highlow=='low'
if highlow=='high':
return hex(int(bin(integer)[:-8],2))
if highlow=='low':
return hex(int(bin(integer)[-8:],2))
Vous devez vous connecter pour publier un commentaire.
Ceci renvoie l'octet de poids fort et le faible de l'octet comme un n-uplet:
Par exemple:
BTW, en fonction de ce que vous avez besoin de les octets, et où le nombre entier est venu, il peut y avoir beaucoup de meilleures façons de faire ce dont vous avez besoin.
rendements
À ajouter à Ned de la réponse qui est tout à fait correct, struct est un outil puissant pour extraire des octets.
Dans cet exemple, le "<" dit pack d'interpréter l'entrée comme little-endian, et le "H" dit de s'attendre à un numéro à 2 octets. Struct produit des octets de l'objet (Python 3), qui peut ensuite être convertie en un tuple pour satisfaire la chaîne de paramètres de mise en forme pour %x à imprimer hors de l'hexagone.
Python 2.7 est un peu plus lourd, seulement parce struct.pack met les info dans une chaîne de caractères qui doit être divisé en ses personnages:
Si vous avez vraiment sont de faire quelque chose d'aussi simple que de cet exemple, c'est probablement excessif. Si vous êtes à la manipulation des valeurs plus ou différentes longueurs de nombres à partir de, par exemple, les registres observée à partir d'un microcontrôleur, ou l'échange de données avec le C ou le C++, pensez à utiliser struct pour le rendre plus facile pour régler les octets.