10
votes

Convertir de Hex en binaire sans perdre le python de 0

J'ai une valeur hexagonale dans une chaîne comme xxx

Je sais que je peux convertir cela en binaire avec: xxx

Toutefois, Cela perd le premier 0. Y a-t-il de toute façon pour faire cette conversion sans perdre les 0? Ou est le meilleur moyen de le faire juste pour compter le nombre de 0 d'avant de la conversion, puis l'ajoutez ensuite.


5 commentaires

Y a-t-il une raison particulière dont vous avez besoin le 0 s?


J'utilise la valeur h ultérieurement comme une clé d'un dictionnaire. La clé a toutefois tous les chanteurs.


Y a-t-il une raison convaincante que vous utilisez une représentation de chaîne binaire de la valeur plutôt que d'un entier pour la clé de dictionnaire?


@Waynewerner: Je cherchais cela afin que je puisse facilement comparer 50 numéros binaires et chercher des bits qui ne changent pas. [bin (x) .RJUST (20) pour x dans a] est assez bon.


Connexes: Convertir binaire en ASCII et vice versa


7 Réponses :


20
votes

Je ne pense pas qu'il y ait un moyen de garder ces principaux zéros par défaut.

Chaque chiffre hexagonal se traduit par 4 chiffres binaires, la longueur de la nouvelle chaîne doit donc être exactement 4 fois la taille de l'original. xxx

alors, vous pouvez utiliser .zfill pour remplir les zéros à la taille souhaitée: xxx


3 commentaires

Je pense que cela m'a donné 3 extra 0 pour une raison quelconque


Ah Nevermind ça marche parfaitement. Je ne comptant pas les 0 avant le premier numéro hexagonal non nul. Merci.


@Root: non liée: ne réutilisez pas h nom pour différentes choses, par exemple, utilisez bits nom pour le résultat: bits = bac (int (h, 16) ) [2:]. Zfill (len (h) * 4)



2
votes

Fondamentalement le même mais le rembourrage à 4 bindusts chaque hexdigit xxx


0 commentaires

0
votes

Un débutant à python tel que je vais procéder comme si

databinCrop = databin[18:]


0 commentaires

0
votes

Ceci convertit une chaîne hexagonale en une chaîne binaire. Puisque vous voulez que la longueur soit dépendante de l'original, cela peut être ce que vous voulez. XXX


0 commentaires

9
votes

Ceci est en fait assez facile dans Python, car il n'a aucune limite sur la taille des entiers. Il suffit de préparer un '1' 1 ' code> à la chaîne hexagonale et bandez le correspondant à partir de la sortie.

>>> h = '00112233aabbccddee'
>>> bin(int(h, 16))[2:]  # old way
'1000100100010001100111010101010111011110011001101110111101110'
>>> bin(int('1'+h, 16))[3:]  # new way
'000000000001000100100010001100111010101010111011110011001101110111101110'


1 commentaires

Cherché exactement cela pendant une heure!



0
votes
hexa = '91278c4bfb3cbb95ffddc668d995bfe0'
binary = bin(int(hexa, 16))[2:]
print binary
hexa_dec = hex(int(binary, 2))[2:]
print hexa_dec

0 commentaires

0
votes

J'avais besoin d'un entier comme une entrée et des chaînes hexagonales / cornes pure avec les préfixes '0b' et '0x' afin que ma solution générale est la suivante: xxx


0 commentaires