145 votes

Comment convertir une chaîne de caractères en binaire ?

Je suis à la recherche d'un moyen d'obtenir la représentation binaire d'une chaîne de caractères en python, par exemple

st = "hello world"
toBinary(st)

Existe-t-il un module permettant de réaliser cette opération ?

3voto

RecoJohnson Points 300
def method_a(sample_string):
    binary = ' '.join(format(ord(x), 'b') for x in sample_string)

def method_b(sample_string):
    binary = ' '.join(map(bin,bytearray(sample_string,encoding='utf-8')))

if __name__ == '__main__':

    from timeit import timeit

    sample_string = 'Convert this ascii strong to binary.'

    print(
        timeit(f'method_a("{sample_string}")',setup='from __main__ import method_a'),
        timeit(f'method_b("{sample_string}")',setup='from __main__ import method_b')
    )

# 9.564299999998184 2.943955828988692

method_b est nettement plus efficace pour convertir en un tableau d'octets, car il effectue des appels de fonctions de bas niveau au lieu de transformer manuellement chaque caractère en un nombre entier, puis de convertir ce nombre entier en sa valeur binaire.

1voto

Billal Begueradj Points 5336

Il s'agit d'une mise à jour pour les réponses existantes qui utilisaient bytearray() et ne peut plus travailler de cette façon :

>>> st = "hello world"
>>> map(bin, bytearray(st))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: string argument without an encoding

Parce que, comme expliqué dans le lien ci-dessus, si la source est une chaîne, vous devez également donner l'encodage :

>>> map(bin, bytearray(st, encoding='utf-8'))
<map object at 0x7f14dfb1ff28>

-1voto

Solo Ship Points 1
a = list(input("Enter a string\t: "))
def fun(a):
    c =' '.join(['0'*(8-len(bin(ord(i))[2:]))+(bin(ord(i))[2:]) for i in a])
    return c
print(fun(a))

Prograide.com

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.

Powered by:

X