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 ?
Convertir l'hexagone en binaire
J'ai ABC123EFFF.
Je veux avoir 00101010111100000100100011111111111111 (c'est-à-dire une représentation binaire avec, disons, 42 chiffres et des zéros de tête). avec, disons, 42 chiffres et des zéros de tête).
Les nouvelles chaînes f de Python 3.6 vous permettent de le faire en utilisant une syntaxe très concise :
>>> f'{0xABC123EFFF:0>42b}'
'001010101111000001001000111110111111111111'
ou de rompre avec la sémantique :
>>> number, pad, rjust, size, kind = 0xABC123EFFF, '0', '>', 42, 'b'
>>> f'{number:{pad}{rjust}{size}{kind}}'
'001010101111000001001000111110111111111111'
Ce que vous dites en fait, c'est que vous avez une valeur dans une représentation hexadécimale, et que vous voulez représenter une valeur équivalente en binaire.
La valeur de l'équivalence est un nombre entier. Mais vous pouvez commencer par une chaîne de caractères, et pour visualiser en binaire, vous devez terminer par une chaîne de caractères.
Nous disposons de plusieurs moyens directs d'atteindre cet objectif, sans avoir recours à des pirates utilisant des tranches.
Tout d'abord, avant toute manipulation binaire, convertissez en int (je suppose que c'est dans un format de chaîne de caractères, et non comme un littéral) :
>>> integer = int('ABC123EFFF', 16)
>>> integer
737679765503
Nous pourrions également utiliser un littéral entier exprimé sous forme hexadécimale :
>>> integer = 0xABC123EFFF
>>> integer
737679765503
Maintenant, nous devons exprimer notre entier dans une représentation binaire.
format
Ensuite, passez à format
:
>>> format(integer, '0>42b')
'001010101111000001001000111110111111111111'
Cela utilise la fonction mini-langue .
Pour décomposer cela, voici la forme grammaticale de la chose :
[[fill]align][sign][#][0][width][,][.precision][type]
Pour en faire une spécification répondant à nos besoins, il suffit d'exclure les éléments dont nous n'avons pas besoin :
>>> spec = '{fill}{align}{width}{type}'.format(fill='0', align='>', width=42, type='b')
>>> spec
'0>42b'
et de le passer au format
>>> bin_representation = format(integer, spec)
>>> bin_representation
'001010101111000001001000111110111111111111'
>>> print(bin_representation)
001010101111000001001000111110111111111111
str.format
Nous pouvons l'utiliser dans une chaîne de caractères en utilisant str.format
méthode :
>>> 'here is the binary form: {0:{spec}}'.format(integer, spec=spec)
'here is the binary form: 001010101111000001001000111110111111111111'
Ou alors, il suffit de mettre la spécification directement dans la chaîne originale :
>>> 'here is the binary form: {0:0>42b}'.format(integer)
'here is the binary form: 001010101111000001001000111110111111111111'
Faisons une démonstration des nouvelles cordes F. Elles utilisent les mêmes règles de formatage du mini-langage :
>>> integer = 0xABC123EFFF
>>> length = 42
>>> f'{integer:0>{length}b}'
'001010101111000001001000111110111111111111'
Maintenant, mettons cette fonctionnalité dans une fonction pour encourager la réutilisation :
def bin_format(integer, length):
return f'{integer:0>{length}b}'
Et maintenant :
>>> bin_format(0xABC123EFFF, 42)
'001010101111000001001000111110111111111111'
Si vous souhaitez simplement encoder les données sous forme de chaîne d'octets en mémoire ou sur le disque, vous pouvez utiliser la fonction int.to_bytes
qui n'est disponible que dans Python 3 :
>>> help(int.to_bytes)
to_bytes(...)
int.to_bytes(length, byteorder, *, signed=False) -> bytes
...
Et comme 42 bits divisés par 8 bits par octet égalent 6 octets :
>>> integer.to_bytes(6, 'big')
b'\x00\xab\xc1#\xef\xff'
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.