J'ai ABC123EFFF.
Je veux avoir 001010101111000001001000111111111111 (c'est-à-dire une représentation binaire avec, disons, 42 chiffres et des zéros de tête).
Comment ?
J'ai ABC123EFFF.
Je veux avoir 001010101111000001001000111111111111 (c'est-à-dire une représentation binaire avec, disons, 42 chiffres et des zéros de tête).
Comment ?
Utiliser Built-in fonction format() y Fonction int() C'est simple et facile à comprendre. C'est une version un peu simplifiée de Réponse d'Aaron
int()
int(string, base)
format()
format(integer, # of bits)
Exemple
# w/o 0b prefix
>> format(int("ABC123EFFF", 16), "040b")
1010101111000001001000111110111111111111
# with 0b prefix
>> format(int("ABC123EFFF", 16), "#042b")
0b1010101111000001001000111110111111111111
# w/o 0b prefix + 64bit
>> format(int("ABC123EFFF", 16), "064b")
0000000000000000000000001010101111000001001000111110111111111111
Voir aussi cette réponse
Voici un moyen assez brut de le faire en utilisant des manipulations de bits pour générer les chaînes binaires.
Ce qu'il faut comprendre, c'est que :
(n & (1 << i)) and 1
Ce qui génère un 0 ou un 1 si le iième bit de n est activé.
import binascii
def byte_to_binary(n):
return ''.join(str((n & (1 << i)) and 1) for i in reversed(range(8)))
def hex_to_binary(h):
return ''.join(byte_to_binary(ord(b)) for b in binascii.unhexlify(h))
print hex_to_binary('abc123efff')
>>> 1010101111000001001000111110111111111111
Edit : en utilisant le "nouvel" opérateur ternaire ceci :
(n & (1 << i)) and 1
Deviendrait :
1 if n & (1 << i) or 0
(Je ne suis pas sûr que ce soit très lisible).
Il s'agit d'une légère retouche de la solution de Glen Maynard, qui me semble être la bonne façon de procéder. Elle ajoute simplement l'élément de remplissage.
def hextobin(self, hexval):
'''
Takes a string representation of hex data with
arbitrary length and converts to string representation
of binary. Includes padding 0s
'''
thelen = len(hexval)*4
binval = bin(int(hexval, 16))[2:]
while ((len(binval)) < thelen):
binval = '0' + binval
return binval
Je l'ai sorti d'un cours. Sortez juste self,
si vous travaillez dans un script autonome.
J'ai ajouté le calcul du nombre de bits à remplir à la solution d'Onedinkenedi. Voici la fonction résultante :
def hextobin(h):
return bin(int(h, 16))[2:].zfill(len(h) * 4)
Où 16 est la base à partir de laquelle vous convertissez (hexadécimal), et 4 est le nombre de bits dont vous avez besoin pour représenter chaque chiffre, ou log base 2 de l'échelle.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.