Преобразование строки в двоичный файл в python

Мне нужен способ получить двоичное представление строки в python. например

st = "hello world" toBinary(st) 

Есть ли какой-нибудь аккуратный способ сделать это?

  • Django: сохранение в DB из примера формы
  • Почему str.strip () намного быстрее, чем str.strip ('')?
  • OS-независимая межпрограммная связь между Python и C
  • Импортировать функцию из класса в другой файл?
  • От JPG до b64encode до cv2.imread ()
  • python regex не соответствует определенному Unicode> 2 шестнадцатеричным значениям
  • Не удается загрузить модули Python, установленные через pip из каталога site-packages
  • Большинство Pythonic способ распечатать * не более * некоторое количество десятичных знаков
  • 3 Solutions collect form web for “Преобразование строки в двоичный файл в python”

    Что-то вроде этого?

     >>> st = "hello world" >>> ' '.join(format(ord(x), 'b') for x in st) '1101000 1100101 1101100 1101100 1101111 100000 1110111 1101111 1110010 1101100 1100100' #using `bytearray` >>> ' '.join(format(x, 'b') for x in bytearray(st)) '1101000 1100101 1101100 1101100 1101111 100000 1110111 1101111 1110010 1101100 1100100' 

    Как более пифонический способ, вы можете сначала преобразовать строку в байтовый массив, а затем использовать функцию bin в map :

     >>> st = "hello world" >>> map(bin,bytearray(st)) ['0b1101000', '0b1100101', '0b1101100', '0b1101100', '0b1101111', '0b100000', '0b1110111', '0b1101111', '0b1110010', '0b1101100', '0b1100100'] 

    Или вы можете присоединиться к нему:

     >>> ' '.join(map(bin,bytearray(st))) '0b1101000 0b1100101 0b1101100 0b1101100 0b1101111 0b100000 0b1110111 0b1101111 0b1110010 0b1101100 0b1100100' 

    Обратите внимание, что в python3 вам нужно указать кодировку для функции bytearray :

     >>> ' '.join(map(bin,bytearray(st,'utf8'))) '0b1101000 0b1100101 0b1101100 0b1101100 0b1101111 0b100000 0b1110111 0b1101111 0b1110010 0b1101100 0b1100100' 

    Вы также можете использовать модуль binascii в python 2:

     >>> import binascii >>> bin(int(binascii.hexlify(st),16)) '0b110100001100101011011000110110001101111001000000111011101101111011100100110110001100100' 

    hexlify возвращает шестнадцатеричное представление двоичных данных, тогда вы можете преобразовать в int, указав 16 в качестве базы, а затем преобразуйте его в двоичный с bin .

    Вы можете получить доступ к значениям кода для символов в вашей строке, используя встроенную функцию ord() . Если вам нужно отформатировать это в двоичном формате, метод string.format() выполнит задание.

     a = "test" print(' '.join(format(ord(x), 'b') for x in a)) 

    (Спасибо Ashwini Chaudhary за публикацию этого фрагмента кода.)

    Хотя приведенный выше код работает в Python 3, этот вопрос усложняется, если вы принимаете какую-либо кодировку, отличную от UTF-8. В Python 2 строки являются байтовыми последовательностями, а по умолчанию используется кодировка ASCII. В Python 3 строки считаются Unicode, и существует отдельный тип bytes который больше похож на строку Python 2. Если вы хотите принять любую кодировку, отличную от UTF-8, вам нужно указать кодировку.

    В Python 3 вы можете сделать что-то вроде этого:

     a = "test" a_bytes = bytes(a, "ascii") print(' '.join(["{0:b}".format(x) for x in a_bytes])) 

    Различия между кодировками UTF-8 и ascii не будут очевидны для простых буквенно-цифровых строк, но станут важными, если вы обрабатываете текст, который включает символы, не содержащие набор символов ascii.

    Python - лучший язык программирования в мире.