Bonjour,

La FAQ propose --> ICI <-- deux fonctions bin() et bin_optimise() pour convertir un entier en base 2.

D'une part, ces deux fonctions ne donnent pas le résultat attendu si le nombre à convertir est grand, par exemple bin(4523655555) (et de même pour l'autre fonction) affiche :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1L0L0L0L0L1L1L0L1L1L0L1L0L0L0L0L1L1L0L0L0L0L0L0L1L1L0L0L0L0L0L1L1L
au lieu de

Code : Sélectionner tout - Visualiser dans une fenêtre à part
100001101101000011000000110000011
D'autre part, ces deux fonctions sont, sauf erreur de ma part, bien plus lentes que la fonction utilisant la conversion depuis l'octal ou l'hexa. Voici ces fonctions et les tests (Python 2.5) :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# -*- coding: Latin-1 -*-
 
def bin(n):
    """Convertit un nombre en binaire"""
    q = -1
    res = ''
    while q != 0:
        q = n // 2
        r = n % 2
        res = `r` + res
        n = q
    return res
 
def bin_optimise(n):
    """Convertit un nombre en binaire"""
    if n == 0: return '0'
    res = ''
    while n != 0: n, res = n >> 1, `n & 1` + res
    return res
 
def toBase2_8(n):
    t=['000', '001', '010', '011', '100', '101', '110', '111']
    z=""
    for i in '%o' %(n):
        z+=t[int(i)]
    i=0
    while(z[i]=='0'):
        i+=1
    return z[i:]
 
def toBase2_16(n):
    t=['0000', '0001', '0010', '0011', '0100', '0101', '0110', '0111', \
    '1000', '1001', '1010', '1011', '1100', '1101', '1110', '1111' ]
    z=""
    for i in '%x' %(n):
        z+=t[int(i,16)]
    i=0
    while(z[i]=='0'):
        i+=1
    return z[i:]
 
# Verif coherence des resultats   
n=45236555
print bin(n), '\n', bin_optimise(n), '\n', toBase2_8(n), '\n', toBase2_16(n)
print
 
 
# Test
import time
 
n = 300000
a = time.clock()
for i in range(1,n): bin(i)
b = time.clock()
for i in range(1,n): bin_optimise(i)
c = time.clock()
for i in range(1,n): toBase2_8(i)
d = time.clock()
for i in range(1,n): toBase2_16(i)
e = time.clock()
print b-a, ',', c-b, ',', d-c, ',', e-d
ce qui affiche :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
10101100100100000101001011 
10101100100100000101001011 
10101100100100000101001011 
10101100100100000101001011
 
10.2 , 9.27 , 6.82 , 7.18
Cordialement.

EDIT
Je continue ma lecture de la FAQ et je vois qu'il est signalé à la question "Comment convertir un nombre entier dans une autre base ?" qu'en version 2.6 et postérieures, on dispose d'une fonction bin (builtin ?) pour convertir en base 2. Je pense qu'il faudrait le signaler aussi à la question que j'ai évoquée en début de message où il est dit le contraire :

Il n'existe pas de fonctions dans la distribution de Python pour convertir un nombre entier en binaire
D'autre part, dans la question "Comment convertir un nombre entier dans une autre base ?", la formulation :

Pour convertir un nombre entier (ou en base 10)
me paraît peu claire : qu'est-ce que ça veut dire "ou en base 10" ici ?