Преобразование объекта Python str / unicode в двоичный / шестнадцатеричный blob
есть ли простой способ получить некоторый объект str / unicode, представленный как большое двоичное число (или шестнадцатеричное)?
Я читал некоторые ответы на похожие вопросы, но ни один из них не работает для моего сценария.
Я попытался с помощью структуры модуль от STL но это не сработало, как ожидалось. Символы, как и в двоичных файлах, отображаются как, ну символы.
Я что-то пытаюсь невозможно?
пример:
def strbin(inp):
# sorcery!
return out
>> print strbin("hello")
# Any of these is cool (outputs are random keystrokes)
0b1001010101010000111001110001...
0xad9f...
5 ответов
можно попробовать bitarray
:
>>> import bitarray
>>> b = bitarray.bitarray()
>>> b.fromstring('a')
>>> b
bitarray('01100001')
>>> b.to01()
'01100001'
>>> b.fromstring('pples')
>>> b.tostring()
'apples'
>>> b.to01()
'011000010111000001110000011011000110010101110011'
довольно просто и не требует модулей от pypi:
def strbin(s):
return ''.join(format(ord(i),'0>8b') for i in s)
для этого вам понадобится Python 2.6+.
фрагмент из более крупной функции печати, которую я написал, которая печатает код ascii в hex. Просто есть более подходящие для Python версии функция предыдущий ответ. Кроме того, он работает правильно для символов с однозначными кодами ascii.
def strhex(string, start = '0x'):
return start + ''.join(('{:x}'.format(ord(char))).zfill(2) for char in string)
это в основном Рави но с крошечным исправлением, так что все заслуги перед ним, но консенсус среди рецензентов был в том, что это было слишком большое изменение, чтобы просто сделать редактирование и вместо этого должен быть отдельный ответ... Не знаю почему.
def strhex(str):
h=""
for x in str:
h=h+("0" + (hex(ord(x)))[2:])[-2:]
return "0x"+h
разница в том, что в строке 4 Вы должны проверить, меньше ли символ 0x10, и в этом случае добавьте ноль, иначе, например, 0x1101 станет 0x111.