Bien que cela n'ait pas vraiment d'importance, une chaîne binaire signifie généralement une chaîne contenant des données binaires réelles (un octet contient deux chiffres hexadécimaux, c'est-à-dire que "\ x00" est un octet nul).
trevorKirkby
Réponses:
563
Vous utilisez la intfonction intégrée et lui passez la base du numéro d'entrée, c'est- 2à- dire pour un nombre binaire:
Au cas où quelqu'un chercherait le contraire: bin(255)-> '0b11111111'. Voir cette réponse pour plus de détails.
Akseli Palén
7
Il convient de noter que cela ne fonctionne que pour les entiers binaires non signés. Pour les entiers signés, les options de conversion sont un gâchis.
Fake Name du
2
Comment faire cela en python 3?
Saras Arya
2
@SarasArya C'est très similaire! :) J'ai mis à jour, voir ci-dessus.
détendre le
1
Et notez que dans une session REPL interactive (comme suggéré par l' >>>invite), vous n'avez pas besoin du tout d'utiliser print. L'exemple hypothétique du PO ne l'a pas fait. Donc, il devrait vraiment être identique en Python 2 et 3.
John Y
37
Tapez simplement 0b11111111 dans l'interface interactive python:
Une autre façon de le faire est d'utiliser le bitstringmodule:
>>>from bitstring importBitArray>>> b =BitArray(bin='11111111')>>> b.uint255
Notez que l'entier non signé est différent de l'entier signé:
>>> b.int-1
Le bitstringmodule n'est pas une exigence, mais il a beaucoup de méthodes performantes pour transformer l'entrée en et à partir de bits dans d'autres formes, ainsi que pour les manipuler.
Utiliser int avec base est la bonne solution. J'avais l'habitude de le faire avant de trouver également la base int. Il s'agit essentiellement d'une réduction appliquée sur une liste de compréhension de la manière primitive de convertir le binaire en décimal (par exemple 110 = 2 ** 0 * 0 + 2 ** 1 * 1 + 2 ** 2 * 1)
add =lambda x,y : x + y
reduce(add,[int(x)*2** y for x, y in zip(list(binstr), range(len(binstr)-1,-1,-1))])
Faites attention à 2 informations séparées par deux points.
De cette façon, vous pouvez convertir entre {binaire, octal, hexadécimal, décimal} en {binaire, octal, hexadécimal, décimal} en changeant le côté droit des deux points [:]
:#b -> converts to binary
:#o -> converts to octal
:#x -> converts to hexadecimal
:#0-> converts to decimal as above example
Essayez de changer le côté gauche du côlon pour avoir octal / hexadécimal / décimal.
Pour les grandes matrices (10 ** 5 lignes et plus), il est préférable d'utiliser un matmult vectorisé. Passez dans toutes les rangées et cols en un seul coup. C'est extrêmement rapide. Il n'y a pas de boucle en python ici. Je l'ai initialement conçu pour convertir de nombreuses colonnes binaires comme 0/1 pour 10 colonnes de genre différentes dans MovieLens en un seul entier pour chaque ligne d'exemple.
defBitsToIntAFast(bits):
m,n = bits.shape
a =2**np.arange(n)[::-1]# -1 reverses array of powers of 2 of same length as bitsreturn bits @ a
Réponses:
Vous utilisez la
int
fonction intégrée et lui passez la base du numéro d'entrée, c'est-2
à- dire pour un nombre binaire:Voici la documentation de python2 et de python3 .
la source
bin(255)
->'0b11111111'
. Voir cette réponse pour plus de détails.>>>
invite), vous n'avez pas besoin du tout d'utiliserprint
. L'exemple hypothétique du PO ne l'a pas fait. Donc, il devrait vraiment être identique en Python 2 et 3.Tapez simplement 0b11111111 dans l'interface interactive python:
la source
Une autre façon de le faire est d'utiliser le
bitstring
module:Notez que l'entier non signé est différent de l'entier signé:
Le
bitstring
module n'est pas une exigence, mais il a beaucoup de méthodes performantes pour transformer l'entrée en et à partir de bits dans d'autres formes, ainsi que pour les manipuler.la source
Utiliser int avec base est la bonne solution. J'avais l'habitude de le faire avant de trouver également la base int. Il s'agit essentiellement d'une réduction appliquée sur une liste de compréhension de la manière primitive de convertir le binaire en décimal (par exemple 110 = 2 ** 0 * 0 + 2 ** 1 * 1 + 2 ** 2 * 1)
la source
add = lambda x, y: x + y
,int.__add__
on peut prévoir de réduire. Par exemplereduce(int.__add__, ...)
la source
Une implémentation récursive de Python:
la source
Binaire à décimal:
hexa binaire à octal et etc.
Faites attention à 2 informations séparées par deux points.
De cette façon, vous pouvez convertir entre {binaire, octal, hexadécimal, décimal} en {binaire, octal, hexadécimal, décimal} en changeant le côté droit des deux points [:]
Essayez de changer le côté gauche du côlon pour avoir octal / hexadécimal / décimal.
la source
Pour les grandes matrices (10 ** 5 lignes et plus), il est préférable d'utiliser un matmult vectorisé. Passez dans toutes les rangées et cols en un seul coup. C'est extrêmement rapide. Il n'y a pas de boucle en python ici. Je l'ai initialement conçu pour convertir de nombreuses colonnes binaires comme 0/1 pour 10 colonnes de genre différentes dans MovieLens en un seul entier pour chaque ligne d'exemple.
la source