J'ai ABC123EFFF.
Je veux avoir 001010101111000001001000111110111111111111 (c'est-à-dire repr. Binaire avec, disons, 42 chiffres et des zéros non significatifs).
Comment?
Pour résoudre le problème du zéro final du côté gauche:
my_hexdata = "1a"
scale = 16 ## equals to hexadecimal
num_of_bits = 8
bin(int(my_hexdata, scale))[2:].zfill(num_of_bits)
Il donnera 00011010 au lieu de la version découpée.
len(my_hexdata) * log2(scale)
.Lis
binascii.unhexlify
Renvoie les données binaires représentées par la chaîne hexadécimale spécifiée comme paramètre.
la source
la source
Réponse courte:
Les nouvelles f-strings de Python 3.6 vous permettent de le faire en utilisant une syntaxe très concise:
ou pour rompre avec la sémantique:
Longue réponse:
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 d'équivalence est un entier. Mais vous pouvez commencer par une chaîne, et pour afficher en binaire, vous devez terminer par une chaîne.
Convertir hexadécimal en binaire, 42 chiffres et zéros non significatifs?
Nous avons plusieurs moyens directs pour atteindre cet objectif, sans hacks utilisant des tranches.
Tout d'abord, avant de pouvoir faire une manipulation binaire du tout, convertissez-le en int (je suppose que c'est dans un format de chaîne, pas comme un littéral):
alternativement, nous pourrions utiliser un littéral entier exprimé sous forme hexadécimale:
Nous devons maintenant exprimer notre entier dans une représentation binaire.
Utilisez la fonction intégrée,
format
Passez ensuite à
format
:Cela utilise le mini-langage de la spécification de formatage .
Pour décomposer cela, voici la forme grammaticale de celui-ci:
Pour en faire une spécification pour nos besoins, nous excluons simplement les choses dont nous n'avons pas besoin:
et transmettez-le simplement au format
Mise en forme de chaîne (création de modèles) avec
str.format
Nous pouvons l'utiliser dans une chaîne en utilisant la
str.format
méthode:Ou mettez simplement la spécification directement dans la chaîne d'origine:
Formatage de chaîne avec les nouvelles chaînes f
Montrons les nouvelles f-strings. Ils utilisent les mêmes règles de formatage en mini-langage:
Maintenant, mettons cette fonctionnalité dans une fonction pour encourager la réutilisabilité:
Et maintenant:
De côté
Si vous vouliez simplement encoder les données sous forme de chaîne d'octets en mémoire ou sur disque, vous pouvez utiliser la
int.to_bytes
méthode, qui n'est disponible que dans Python 3:Et puisque 42 bits divisés par 8 bits par octet équivalent à 6 octets:
la source
«0b1010101111000001001000111110111111111111»
la source
la source
Voici une façon assez brute de le faire en utilisant un peu de bidouillage pour générer les chaînes binaires.
Le bit clé à comprendre est:
Ce qui générera un 0 ou un 1 si le i'ième bit de n est défini.
Edit: en utilisant le "nouvel" opérateur ternaire ceci:
Deviendrait:
(Quel TBH je ne sais pas si c'est lisible)
la source
01111001
11111110
.C'est une légère retouche à la solution de Glen Maynard, qui, à mon avis, est la bonne façon de procéder. Il ajoute simplement l'élément de remplissage.
Je l'ai sorti d'une classe. Supprimez simplement
self,
si vous travaillez dans un script autonome.la source
Utiliser la fonction intégrée format () et la fonction int () C'est simple et facile à comprendre. C'est une version un peu simplifiée de la réponse d'Aaron
int ()
format()
Exemple
Voir aussi cette réponse
la source
Remplacez chaque chiffre hexadécimal par les 4 chiffres binaires correspondants:
la source
hex -> décimal puis décimal -> binaire
la source
Autrement:
la source
J'ai ajouté le calcul du nombre de bits à remplir à la solution Onedinkenedi. Voici la fonction résultante:
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.
la source
la source
J'ai un petit espoir qui aide :-)
J'utilise d'abord votre entrée et l'énumère pour obtenir chaque symbole. puis je le convertis en binaire et coupe de la 3ème position à la fin. L'astuce pour obtenir le 0 est d'ajouter la valeur max de l'entrée -> dans ce cas toujours 16 :-)
la forme courte est la méthode de jointure. Prendre plaisir.
la source
la source
La version binaire de ABC123EFFF est en fait 1010101111000001001000111110111111111111
Pour presque toutes les applications, vous voulez que la version binaire ait une longueur qui soit un multiple de 4 avec un remplissage principal de 0.
Pour obtenir cela en Python:
Exemple 1:
Exemple 2:
Notez que cela fonctionne également dans Micropython :)
la source
Il suffit d'utiliser le module coden (note: je suis l'auteur du module)
Vous pouvez y convertir haxedecimal en binaire.
Les mots-clés de conversion sont:
Vous pouvez donc également formater: e. hexadecimal_output = bin_to_hex (a_binary_number)
la source
HEX_TO_BINARY_CONVERSION_TABLE = {'0': '0000',
la source
la source
la source
la source