Подтвердить что ты не робот

Как преобразовать строку в байтовые массивы?

Как преобразовать строку в значение байта? У меня есть строка "hello", и я хочу изменить что-то вроде "/x68...".

4b9b3361

Ответ 1

Python 2.6 и более поздние версии имеют тип bytearray, который может быть тем, что вы ищете. В отличие от строк, он изменен, т.е. Вы можете изменить отдельные байты "на месте", а не создавать целую новую строку. Он имеет приятное сочетание особенностей списков и строк. И это также делает ваше намерение понятным, что вы работаете с произвольными байтами, а не с текстом.

Ответ 2

Возможно, вы хотите это (Python 2):

>>> map(ord,'hello')
[104, 101, 108, 108, 111]

Для строки Unicode это возвращает кодовые точки Unicode:

>>> map(ord,u'Hello, 马克')
[72, 101, 108, 108, 111, 44, 32, 39532, 20811]

Но закодируйте его, чтобы получить значения байтов для кодировки:

>>> map(ord,u'Hello, 马克'.encode('chinese'))
[72, 101, 108, 108, 111, 44, 32, 194, 237, 191, 203]
>>> map(ord,u'Hello, 马克'.encode('utf8'))
[72, 101, 108, 108, 111, 44, 32, 233, 169, 172, 229, 133, 139]

Ответ 3

Если вы хотите получить шестнадцатеричное строковое представление, которое вы можете сделать:

"hello".encode("hex") # '68656c6c6f'

И чтобы удовлетворить ваше референтное представление (не воспринимайте это всерьез, предположите, что это не то, что вы действительно хотите):

"".join(["/x%02x" % ord(c) for c in "hello"]) # '/x68/x65/x6c/x6c/x6f'