web-dev-qa-db-fra.com

Convertissez des nombres décimaux en fichiers binaires dans python

Existe-t-il un module ou une fonction dans python que je peux utiliser pour convertir un nombre décimal en son équivalent binaire? Je suis capable de convertir du binaire en décimal en utilisant int ('[binary_value]', 2), donc est-il possible de faire l'inverse sans écrire le code pour le faire moi-même?

121
Paul

tous les nombres sont stockés en binaire. si vous voulez une représentation textuelle d'un nombre donné en binaire, utilisez bin(i)

>>> bin(10)
'0b1010'
>>> 0b1010
10
201
aaronasterling
"{0:#b}".format(my_int)
67
Matt Williamson

Sans le 0b devant:

"{0:b}".format(int)

À partir de Python 3.6, vous pouvez également utiliser littéral de chaîne formaté ou f -string , --- PEP :

f"{int:b}"
47
user136036
def dec_to_bin(x):
    return int(bin(x)[2:])

C'est si facile.

34
schmidmt

Vous pouvez également utiliser une fonction du module numpy

from numpy import binary_repr

qui peut également gérer les zéros non significatifs:

Definition:     binary_repr(num, width=None)
Docstring:
    Return the binary representation of the input number as a string.

    This is equivalent to using base_repr with base 2, but about 25x
    faster.

    For negative numbers, if width is not given, a - sign is added to the
    front. If width is given, the two's complement of the number is
    returned, with respect to that width.
10
flonk

Je suis d'accord avec la réponse de @ aaronasterling. Cependant, si vous voulez une chaîne non binaire que vous pouvez convertir en int, vous pouvez utiliser l'algorithme canonique:

def decToBin(n):
    if n==0: return ''
    else:
        return decToBin(n/2) + str(n%2)
8
inspectorG4dget
n=int(input('please enter the no. in decimal format: '))
x=n
k=[]
while (n>0):
    a=int(float(n%2))
    k.append(a)
    n=(n-a)/2
k.append(0)
string=""
for j in k[::-1]:
    string=string+str(j)
print('The binary no. for %d is %s'%(x, string))
4
harry

Par souci d’achèvement: si vous souhaitez convertir la représentation à virgule fixe en son équivalent binaire, vous pouvez effectuer les opérations suivantes:

  1. Obtenez le entier et la partie fractionnaire.

    from decimal import *
    a = Decimal(3.625)
    a_split = (int(a//1),a%1)
    
  2. Convertit la partie fractionnaire en sa représentation binaire. Pour ce faire, multipliez successivement par 2.

    fr = a_split[1]
    str(int(fr*2)) + str(int(2*(fr*2)%1)) + ...
    

Vous pouvez lire l'explication ici .

1
Kalouste